Java 测试等待VideoView完成以启动新活动robolectric 3
我必须测试一个有视频的屏幕闪屏,视频持续时间是11秒,当视频结束后开始其他活动 我有以下测试课程:Java 测试等待VideoView完成以启动新活动robolectric 3,java,android,unit-testing,robolectric,Java,Android,Unit Testing,Robolectric,我必须测试一个有视频的屏幕闪屏,视频持续时间是11秒,当视频结束后开始其他活动 我有以下测试课程: public class ScreenSplashTest { private ShadowActivity screenSplash; private ShadowVideoView videoView; @Before public void setUp(){ ScreenSplash screenSplashActivity = Robolectric.bui
public class ScreenSplashTest {
private ShadowActivity screenSplash;
private ShadowVideoView videoView;
@Before
public void setUp(){
ScreenSplash screenSplashActivity = Robolectric.buildActivity(ScreenSplash.class).create().get();
screenSplash = Shadows.shadowOf(screenSplashActivity);
VideoView videoViewWidget = (VideoView)screenSplash.findViewById(R.id.videoViewSplash);
videoView = Shadows.shadowOf(videoViewWidget);
}
@Test
public void activityStarts_VideoStartsToPlay() throws Exception{
assertTrue(videoView.isPlaying());
}
@Test
public void whenVideoFinish_StartsChooseTeamActivity() throws Exception{
videoView.stopPlayback();
Intent nextActivity = screenSplash.getNextStartedActivity();
assertEquals(nextActivity.getComponent().getClassName(), ChooseTeamActivity.class.getName());
}
}
这是我的屏幕闪屏活动:
public class ScreenSplash extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen_splash);
getSupportActionBar().hide();
this.getWindow().getDecorView().setBackgroundColor(0xffffff);
VideoView videoView = (VideoView) findViewById(R.id.videoViewSplash);
Uri videoFile = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.splash);
videoView.setVideoURI(videoFile);
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
Intent i = new Intent(getApplicationContext(), ChooseTeamActivity.class);
startActivity(i);
}
});
videoView.start();
}
}
问题是如何为该代码编写测试?您可以从ShadowVideoView的getOnCompletionListener获取MediaPlayer.OnCompletionListener,然后调用其onCompletion方法。您可以模拟MediaPlayer对象。 可能的代码片段:
assertTrue(videoView.isPlaying());
MediaPlayer.OnCompletionListener completionListener = videoView.getOnCompletionListener();
completionListener.onCompletion(mock(MediaPlayer.class));
Intent intent = screenSplash.getNextStartedActivity();
assertNull(intent);
assertEquals(ChooseTeamActivity.class.getName(), intent.getComponent().getClassName());
这种方法将能够测试上述代码。如果您考虑的是视频的实际完整播放,然后执行侦听器代码,那么这种方法将不符合单元测试方法。我们测试的是编写代码的功能,而不是底层框架。
在这种情况下,测试代码应该测试一个有效的URI,检查它是否正在播放,以及侦听器是否执行了所需的操作。
通过MediaPlayer对象测试侦听器也将是对底层android代码的测试,而不仅仅是对您的代码的测试。OhThak you:)我非常乐意为您提供单元测试thaks的指导