読者です 読者をやめる 読者になる 読者になる

山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

espresso2でmockを使う

今日はespresso2でmockを使えるか試してみました。Daggerを使う方法もあるようですがやっぱりDIはめんどくさい。mockitoを使いたいです。

まず、テストクラスとActivityは同じstatic変数を参照できました。なのでなんでもいいのでstatic変数を介してmockを渡すのが一番簡単そうです。

またactivityのインスタンスを取得することもできました。最初に@RuleでActivityTestRuleを定義します。そのActivityTestRuleから取得できます。getActivity()メソッドです。

ActivityTestRuleをnewするときにコンストラクタの引数があります。Activityクラスのみでnewするとデフォルトでテストメソッドの実行前にactivityが生成されます。これを生成されないようにして自分で生成するようにもできます。Activityクラス以外に2つ引数があり、1つはtouch modeらしいですが内容は未確認です。もう1つが自動的に生成するかどうかになっています。このように指定します。

public ActivityTestRule<MyQuiz> mActivityRule =
    new ActivityTestRule<>(MyQuiz.class, true, false);

この場合にどのようにActivityを起動するかというと、ActivityTestRuleのlaunchActivity()メソッドを使います。

mActivityRule.launchActivity(new Intent());

このIntentには好きな値を入れることもできます。モックではないですがIntentのモックのようなことができます。

launchActivity()の前にgetActivity()をしてもnullが返ってきます。launchActivity()するとonCreate()まで実行されます。そのためonCreate()の時点でモックを渡したいときは、static変数を介するかIntentを介するしかなさそうです。

あと気づいたところではMatcherがあまり充実していないようでカスタムマッチャーを使っている例が結構ありました。例えばImageButtonのbackgroundがマッチするか、とか、onData()の中の要素に含まれるテキストがマッチするか、など。デフォルトでもっと充実するとよいですね。

参考

chiuki/android-test-demo · GitHub

ActivityTestRule | Android Developers