2016-08-25 3 views
0

У меня есть эта проблема, пока модуль тестирует воспроизведение с использованием Robolectric. У меня есть кнопка воспроизведения, которая имеет код что-то вроде этого ::Ошибка при воспроизведении модуля тестирования в Robolectric из-за метода prepareAsync() MediaPlayer

Btn_Play.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      MediaPlayer mPlayer = new MediaPlayer(); 
    mPlayer.setDataSource(String.valueOf(list.get(position))); 
    mPlayer.prepareAsync(); 

    mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 

      mPlayer.start(); 
      System.out.println("Playing...."); 
     } 
    }); 
    } 
}); 

Roboletric Test Unit код:

@Test 
public void varifyPlayButton() 
{ 
    ShadowMediaPlayer.MediaInfo mediaInfo= new ShadowMediaPlayer.MediaInfo(); 
    play=(Button)fragment.getView().findViewById(R.id.play_Btn); 
    ShadowMediaPlayer shadowMediaPlayer=new ShadowMediaPlayer(); 
    shadowMediaPlayer.addMediaInfo(DataSource.toDataSource(fragmentOne.list.get(0).getAbsolutePath()), mediaInfo); 
    play.performClick(); 
    assertThat(play.isPressed(),equalsTo(true)); //This assertion fails. 
} 

тест проходит без каких-либо исключений, но он не будет выполнять mPlayer.setOnPreparedListener (). Какая может быть проблема? Я могу воспроизводить звук в реальных устройствах. Это правильный подход для написания модульного теста в Robolectric? Я много искал эту проблему. Но я не могу это разрешить. Любое предложение или учебное пособие оценено. Спасибо.

+0

https://github.com/robolectric/deckard - Это образец проекта. Пожалуйста, изучите его. –

+0

@ DvD Спасибо. Я просмотрел эту ссылку, прежде чем публиковать этот вопрос, но я не счел это полезным. – Shambhavi

+0

https://github.com/codepath/android_guides/wiki/Unit-Testing-with-Robolectric - И это? Я не совсем понимаю, что это кристально чистое демо, за которым я последовал. Если я его получу, обновит его. * Проверьте ссылку youtube в ссылках. Google I/O. –

ответ

0

Robolectric пытается устранить все асинхронное выполнение и сделать их синхронизированными. Сначала установите подготовленныйLister, а затем вызовите prepareAsync.

+0

Большое вам спасибо. Это сработало для меня. – Shambhavi