21

アクティビティで、ランダムな追加データを使用して新しいインテントを開始しました。

Intent newIntent = new Intent(this, UserActivity.class);
newIntent.putExtra("key", generateRandomKey());
startActivity(newIntent);

私はこのようにそれをテストしました:

Intent intent = new Intent(myactivity, UserActivity.class);
Assert.assertThat(activity, new StartedMatcher(intent));

intent私のテストコードには余分なデータがないため、失敗しましたkey

はランダムであるためkey、同じキーを提供することは困難です。したがって、インテントのターゲット クラスが であるかどうかをテストしたいだけですがUserActivity、それを行う方法が見つかりませんでした。

解決策はありますか?

4

2 に答える 2

30

generateRandomKey() メソッドを別のクラスに抽出すると、Robolectric の実行時に生成される「ランダム」キーが実際には既知の値になるように、そのクラスの制御されたバージョンを (手動で、または RoboGuice などを使用して) テストに挿入できます。 . しかし、製品コードではまだランダムです。

次に、アクティビティが作成するインテントをキャッチし、「キー」に予想されるテスト値が含まれているかどうかをテストできます。


しかし、あなたの質問に直接答えるには...

インテントが生成されたかどうか (この場合はボタンのクリックによって) をテストしていて、使用する正しいターゲットを指している場合

public static void assertButtonClickLaunchesActivity(Activity activity, Button btn, String targetActivityName) {
    btn.performClick();
    ShadowActivity shadowActivity = shadowOf(activity);
    Intent startedIntent = shadowActivity.getNextStartedActivity();
    ShadowIntent shadowIntent = shadowOf(startedIntent);
    assertThat(shadowIntent.getComponent().getClassName(), equalTo(targetActivityName));
}
于 2012-09-26T15:56:25.393 に答える
1

このようなもの?

Assert.assertTrue(UserActivity.class.equals(intent.getComponent().getClassName()));

または assertEquals?

于 2012-09-20T09:10:18.507 に答える