由于MediaPlayer的prepareAsync()方法,在Robolectric中进行单元测试回放时失败

时间:2016-08-25 05:34:19

标签: android unit-testing robolectric

使用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....");
        }
     });
   }
});

Roboletric 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中编写单元测试是否正确?我对这个问题进行了很多搜索。但我无法解决这个问题。任何建议或教程表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

Robolectric尝试消除所有异步执行并使它们同步。首先设置preparedLister,然后调用prepareAsync。