小编Mr.*_*bot的帖子

单元测试中的 Intent extras Android Mockito

我正在尝试验证是否将特定的附加功能添加到了 Intent,但是我一直在单元测试 Android 中为 Intent 获取空值。我有以下课程需要测试:

public class TestClass extends SomeNotifier {
        private Intent mIntent = new Intent("testintent");

        public TestClassConstructor(Context context) {
            super(context);
        }

        @Override
        public void notifyChange() {
            mIntent.putExtra("Key one", 22);
            mIntent.putExtra("Key two", 23);
            mIntent.putExtra("Key three", 24);
            getContext().sendBroadcast(mIntent);
        }
    }
Run Code Online (Sandbox Code Playgroud)

测试如下(我也尝试过使用 mockIntent,但结果是一样的,额外的还是空的):

@RunWith(MockitoJUnitRunner.class)
public class TestClassTest {

  @Mock
  Context mMockContext;

  @Test
  public void sendBroadcastTest() {

  ArgumentCaptor<Intent> argument = ArgumentCaptor.forClass(Intent.class);

  TestClass testClassNotifier = new TestClass (mMockContext);
  testClassNotifier.notifyChange();
  verify(mMockContext).sendBroadcast(argument.capture());


 Intent intent = argument.getValue();
 //THE INTENT IS NULL
 Assert.assertTrue(intent.hasExtra("Key one"));

    }
} …
Run Code Online (Sandbox Code Playgroud)

android unit-testing mockito extras android-intent

6
推荐指数
2
解决办法
5828
查看次数

AudioManager在setMode(MODE_IN_COMMUNICATION)中引入延迟

即使打开耳机,我仍试图在扬声器上播放声音;但是,如果在后台播放音乐,我希望在耳机上播放音乐,直到播放声音为止。

因此,我正在采取以下步骤:

  • 在播放声音之前,我先获得音频聚焦,以便所有背景音乐都停止播放
  • 获得audioFocus之后,我设置MODE_COMMUNICATION为AudioManager,以便可以在扬声器上播放声音。
  • 声音结束后,我放弃了AudioFocus并将其设置MODE_NORMALAudioManager,以便背景音乐可以继续在耳机上播放。

奇怪的是,这取决于设备,在某些设备上可以,但是在Nexus 6P(Huawei)设备上设置后MODE_COMMUNICATION,会延迟3-4秒才能播放声音。如果我没有延迟地播放声音,扬声器和耳机都不会播放。

问题

我怎么知道在播放声音之前要设置多少延迟?我可以附加任何听众,因此可以通知我在设置MODE_COMMUNICATION声音后可以播放吗?

我不想设置延迟,即使没有必要!

解决方案不是将模式设置为类的构造函数(以跳过延迟),因为我需要在特定时刻在扬声器上播放声音!

PS:我正在用播放声音AudioTrack,但是我也尝试了MediaPlayer(设置setAudioStreamType(MODE_IN_COMMUNICATION)),但没有成功,延迟仍然存在!

有什么建议吗?

java android android-mediaplayer audiotrack android-audiomanager

5
推荐指数
1
解决办法
347
查看次数