アクティビティとサービスの間の相互作用をどのようにテストできますか?
たとえば、現在の音楽プレーヤーの再生キューを管理するサービスと、再生キューをユーザーに表示するアクティビティがあります。アクティビティが再生キューを正しく表示することをテストしたいと思います。
public class ViewAvailableSongsActivityTests extends ActivityInstrumentationTestCase2<ViewAvailableSongsActivity> {
public ViewAvailableSongsActivityTests() {
super(ViewAvailableSongsActivity.class);
}
public void testOneAvailableSong() {
SongParcel song = new SongParcel("Test Title", "Test Artist", "content://testuri");
addSongToAvailableList(song);
Activity activity = this.getActivity();
ListView lstAvailableSongs = (ListView) activity.findViewById(R.id.lstAvailableSongs);
assertEquals(1, lstAvailableSongs.getCount());
assertListViewItemIsCorrect(lstAvailableSongs, 0, song);
stopMyService();
}
public void test3AvailableSongs() {
SongParcel songLast = new SongParcel("Test Title", "Test Artist1", "content://testuri");
addSongToAvailableList(songLast);
SongParcel songFirst = new SongParcel("A Good Song", "Test Artist2", "content://testuri");
addSongToAvailableList(songFirst);
SongParcel songMiddle = new SongParcel("Bravo", "David", "content://tests");
addSongToAvailableList(songMiddle);
Activity activity = this.getActivity();
ListView lstAvailableSongs = (ListView) activity.findViewById(R.id.lstAvailableSongs);
assertEquals(3, lstAvailableSongs.getCount());
assertListViewItemIsCorrect(lstAvailableSongs, 0, songFirst);
assertListViewItemIsCorrect(lstAvailableSongs, 1, songMiddle);
assertListViewItemIsCorrect(lstAvailableSongs, 2, songLast);
stopMyService();
}
private void addSongToAvailableList(SongParcel song) {
Context context = this.getInstrumentation().getTargetContext();
Intent addSongIntent = new Intent(context, MyService.class);
addSongIntent.setAction(MyService.ADD_SONG_TO_AVAILABLE_LIST);
addSongIntent.putExtra(MyService.EXTRA_SONG, song);
context.startService(addSongIntent);
}
private void assertListViewItemIsCorrect(ListView lstView, int index, SongParcel song) {
Adapter adapter = lstView.getAdapter();
View row = adapter.getView(0, null, lstView);
TextView txtTitle = (TextView) row.findViewById(R.id.txtTitle);
assertEquals(song.getTitle(), txtTitle.getText());
TextView txtArtist = (TextView) row.findViewById(R.id.txtArtist);
assertEquals(song.getArtist(), txtArtist.getText());
}
private void stopMyService() {
this.getActivity().stopService(new Intent(this.getInstrumentation().getTargetContext(), MyService.class));
}
}
を使用してみActivityInstrumentationTestCase2
ましたが、サービスの使用に問題がありました。アクティビティは常に 3 曲を表示するため、サービスはテストからテストへと持続しているように見えました。
ActivityInstrumentationTestCase2
間違って使用していますか、それとも別のテスト クラスを使用する必要がありますか?