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()));
}}
このことを踏まえて、自分の単体テスト見ると、かなり残念な感じ・・・。
頑張って直さなきゃ・・・。