由于 MediaPlayer 的 prepareAsync() 方法,Robolectric 中的单元测试播放失败
Failure while unit testing playback in Robolectric because of prepareAsync() method of MediaPlayer
我在使用 Robolectric 对回放进行单元测试时遇到了这个问题。我有一个播放按钮,它有类似这样的代码::
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....");
}
});
}
});
机器人单元测试代码为:
@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 中编写单元测试是否正确?我对这个问题进行了很多搜索。但我无法解决这个问题。任何建议或教程表示赞赏。谢谢。
Robolectric 试图消除所有异步执行并使它们同步。先设置preparedLister,然后调用prepareAsync.
我在使用 Robolectric 对回放进行单元测试时遇到了这个问题。我有一个播放按钮,它有类似这样的代码::
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....");
}
});
}
});
机器人单元测试代码为:
@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 中编写单元测试是否正确?我对这个问题进行了很多搜索。但我无法解决这个问题。任何建议或教程表示赞赏。谢谢。
Robolectric 试图消除所有异步执行并使它们同步。先设置preparedLister,然后调用prepareAsync.