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

リア充爆発日記

You don't even know what ria-ju really is.

RobolectricでActivityの遷移を確認する方法

Android unit test

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()));


うーん。なんかめんどくさいなぁ。どうすればいいの!スタックオーバーフローに質問してみようと思ったけど英語で質問するの時間かかりそうだからやめた。。。