こんなテストコードを書いた。
@Test
public void testTest() throws Exception {
SparseArray<String> strMap = new SparseArray<>();
strMap.put(0x00, "moji");
String err1 = strMap.get(0x00, "momo");
System.out.println(err1);
}
実行すると、nullになった。。。
newしてるのにnullか。
よくわからずに書いている箇所があるが、build.gradleのreturnDefaultValuesもそうだ。
これをコメントアウトすると、実行するとエラーになる。
java.lang.RuntimeException: Method put in android.util.SparseArray not mocked
これだ。
実機を動かさずに行うUnitTestではandroid.jarが空実装だから、例外になるようだ。
これを、例外を出さずにデフォルト値を返すようにするのが、returnDefaultValuesというわけだ。
SparseArrayは特にAndroid実機の機能を使っているわけでは無いのだろうけど、これを解決させるのに悩むくらいだったら、実機で動かしてしまった方が楽そうだ。
そういう、Mockなどを使わずに動かしてテストもしたいなら、Instrumented Unit Testsの方になるようだ。
Local Unit Testsを始めるときと同じように、書いてあるとおりにやると動いた。
テストを右クリックで生成するときに、どのフォルダに格納するか聞いてくるが、あれの先が「androidTest」になるのだな。
そして、build.gradleも「testCompile」じゃなくて「androidTestCompile」になる。
returnDefaultValuesはtrueのままでよいようだ。
実行すると、アプリが実機に転送されて実行し、ちゃんとassertThat()なんかも判定している。
android.jarのところも含めてMockにしてメソッドを動かしていくならLocal Unit Tests、android.jarはそのまま流して動かしたいならInstrumented Test Unitsがよいかな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。