RobolectricでActivityの遷移を確認する方法
ActivityAからActivityBに遷移(?)できていることを確認するテストを書きたかったのでやり方を調べてみるとStartedMatcherってのを使うっぽかった。
http://pivotal.github.com/robolectric/javadoc/com/xtremelabs/robolectric/matchers/StartedMatcher.html
で、
// trigger code before assert assertThat(activity, new StartedMatcher(ActivityB.class));
ってやると通らない。実際には正しく動いているコードなんですけど。こんなAssertionErrorが。
java.lang.AssertionError:
Expected: to start Intent{componentName=ComponentName{pkg='com.example.activities', cls='com.example.activities.ActivityB'}}, but started Intent{componentName=ComponentName{pkg='com.example', cls='com.example.activities.ActivityB'}}
but: was
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
なんかどうもManifestのパッケージ名と比較してて、そこが違うからダメよ、って言っているように見える。ルートパッケージからActivity用のパッケージ掘ってるんで。でもバグじゃないの、これ。
ググってみるとだいぶ前だけど同じことを言っている人がいたけど返事がない。ただの屍のようだ。
https://groups.google.com/forum/#!msg/robolectric/uJg1npG1NUU/6f2aknsJppkJ
しょうがないのでIntentの中身でassertすることに。
// trigger code before assert ShadowActivity shadowActivity = Robolectric.shadowOf(activity); Intent startedIntent = shadowActivity.getNextStartedActivity(); ShadowIntent shadowIntent = Robolectric.shadowOf(startedIntent); assertThat(shadowIntent.getComponent().getClassName(), equalTo(ActivityB.class.getName()));
うーん。なんかめんどくさいなぁ。どうすればいいの!スタックオーバーフローに質問してみようと思ったけど英語で質問するの時間かかりそうだからやめた。。。