2016-08-25 12 views
0

Robolectricを使用して再生をユニットテストする際にこの問題が発生します。私はこの::Robolectricでのユニットテストの再生中にエラーが発生しました。Media PlayerのprepareAsync()メソッドのためにエラーが発生しました

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 
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-テスト--with-Robolectric - これとは?私は正確にそのクリスタルクリアデモを取得していない。私がそれを手に入れたら、それを更新するでしょう。 *参考文献のYouTubeのリンクをチェックしてください。 Google I/O。 –

答えて

0

Robolectricは、すべての非同期実行を排除して同期させようとします。最初にpreparedListerを設定し、次にprepareAsyncを呼び出します。

+0

ありがとうございます。それは私のために働いた。 – Shambhavi

関連する問題