SiNBLOG

140文字に入らないことを、極稀に書くBlog

slim3 で単体テストを行う時のDataStoreの扱いが分からない。

jUnit単体テストを実行していたら、エラーが発生した。

No API environment is registered for this thread.

どうやら、Datastore.createKey()実行時に発生しているようなのだが、原因が分からない。

テスト用のクラスを継承したクラスで実行する場合は動くので、その辺りに何かあるのだろうか?

■動かないパターン


public class LoginHelper {

/**
* 会員を操作するサービス
*/
private MemberService service = new MemberService();

/**
* テスト用の会員を返す
*/
public Member getMember() {
Member member = new Member();
member.setName("hoge");
service.insert(member); /* このメソッドの中で、Datastore.createKey()している */
}
}

public class LoginViewHelperTest extends AppEngineTestCase {

/** LoginInfo */
private member = new LoginHelper().getMember(); /* ここでエラー */

@Test
public void インスタンス生成() {
LoginViewHelper helper = LoginViewHelper.getInstance(loginInfo);
assertThat(helper,is(notNullValue()));
}

}

■動くパターン


public class ControllerTest extends ControllerTestCase {

private MemberService service = new MemberService();

@Test
public void run() throws Exception {
Member member = new Member();
member.setName("hoge");
service.insert(helper.getMember()); /* ここではエラーにならない */
}
}

やってる処理自体は変わらない気がするので、タイミングとかなのだろうか?


解決策はこちら!
slim3の単体テストでAppEngineの環境構築しているのは誰なのか。 - SinDiary