GAE + GWT プログラミングメモ

Google App Engine とGoogle Web Toolkit のメモ

Datastoreのテスト

作成中のアニメ特化アンテナサイト
雲の中の2次

Datastoreのテストを記述する方法が用意されているので、これを用いて、GAEのテストを記述する。

1. 必要なビルドパスを通す。
GAEプロジェクトを作った初期状態では、テスト記述に必要なビルドパスが通っていない。
${SDK_ROOT}/lib/impl/appengine-api-stubs.jar と ${SDK_ROOT}/lib/testing/appengine-testing.jar が通っていないので、プロジェクトのプロパティを開いて、「外部Jar追加」から追加する。
jarファイルは特に変更していなければ、eclipseのplugins以下を探せばある。
f:id:kumo2ji:20130731174604p:plain

ライブラリを追加すると警告が表示される。
これを消すためには、Google -> Webアプリケーション の警告抑制に追加する。f:id:kumo2ji:20130731175445p:plain

JUnit 4に関してもビルドパスを通しておく。


2. テストを記述する。
GAEプロジェクトを作成すると、testフォルダが作成されるので、この下にテストクラスを作成する。

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig;
import com.google.appengine.tools.development.testing.LocalServiceTestHelper;

public class LocalDatastoreTest {
	private final LocalServiceTestHelper helper =
	        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());

	    @Before
	    public void setUp() {
	        helper.setUp();
	    }

	    @After
	    public void tearDown() {
	        helper.tearDown();
	    }

	    // run this test twice to prove we're not leaking any state across tests
	    private void doTest() {
	        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
	        assertEquals(0, ds.prepare(new Query("yam")).countEntities(FetchOptions.Builder.withLimit(10)));
	        ds.put(new Entity("yam"));
	        ds.put(new Entity("yam"));
	        assertEquals(2, ds.prepare(new Query("yam")).countEntities(FetchOptions.Builder.withLimit(10)));
	    }

	    @Test
	    public void testInsert1() {
	        doTest();
	    }

	    @Test
	    public void testInsert2() {
	        doTest();
	    }

}

3. テストを実行

参考:
ローカル ユニットのテスト - Google App Engine — Google Developers