2015-07-19 1 views
2

Я должен проверить всплеск экрана, у которого есть видео, продолжительность видео составляет 11 секунд, когда видео заканчивается другим действием.Испытайте до конца видеообработки, чтобы начать новую активность robolectric 3

У меня есть тест последующий класс:

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

И это моя ScreenSplash активность:

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

Вопрос заключается в том, как я могу написать тест для этого кода?

ответ

2

Вы можете получить MediaPlayer.OnCompletionListener из getOnCompletionListener ShadowVideoView и затем вызвать его метод 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, а не только ваш код.

+0

ohh thak you :) Я очень нуждаюсь в блоке тестирования thaks для руководства – kentverger