SiNBLOG

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

slim3の単体テストでAppEngineの環境構築しているのは誰なのか。

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

上記エントリーで迷宮入りしていた内容を、コメントにて、shin1ogawa殿にご教授していただいた。


迷宮入りしていたのは、単体テスト時に、Datastoreを触ろうとすると、以下のエラーが出ていた。

No API environment is registered for this thread.

上記のエラーの原因は、テスト時のAppEngineの環境ができていないためのようだ。

環境構築は以下のメソッドで行われるため、それより先だとダメ。

AppEngineTestCase#setUp()


それを踏まえて、[動かないパターン]を直すと、こんな感じかな。


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; /*

@Override
public void setUp() throws Exception {
super.setUp();
member = new LoginHelper().getMember(); /* AppEngineTestCase#setUp()の後に、Datastoreを利用 */
}

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

}

このことを踏まえて、自分の単体テスト見ると、かなり残念な感じ・・・。

頑張って直さなきゃ・・・。