gpt4 book ai didi

android - 在测试 : "Method putExtra in android.content.Intent not mocked" 中创建 Intent

转载 作者:行者123 更新时间:2023-11-29 15:03:23 27 4
gpt4 key购买 nike

我正在尝试使用 JUnit4 和 Mockito 对收听“com.android.music.metachanged” Intent 的广播接收器进行单元测试。

广播接收器在接收到 Intent 时启动服务。我想断言服务已启动。我还想断言接收到的 Intent 的字符串额外“艺术家”与发送的 Intent 之一相同。

这就是我目前所拥有的...

@RunWith(PowerMockRunner.class)
public class MusicBroadcastReceiverUnitTest {
private MusicBroadcastReceiver mReceiver;

@Mock
private Context mContext;

@Before
public void setUp() {
MockitoAnnotations.initMocks(this);

mReceiver = new MusicBroadcastReceiver();
}

@Test
public void testStartMusicRegistrationService() {
Intent intent = new Intent("com.android.music.metachanged");
intent.putExtra("artist", "SampleArtist");

mReceiver.onReceive(mContext, intent);
assertNull(mReceiver.getResultData());

ArgumentCaptor<Intent> argument = ArgumentCaptor.forClass(Intent.class);
verify(mContext, times(1)).startService(argument.capture());

Intent receivedIntent = argument.getValue();
assertEquals("SampleArtist", receivedIntent.getStringExtra("artist"));
}
}

但这会触发 java.lang.RuntimeException:android.content.Intent 中的方法 putExtra 未被模拟。

我检查了this出来,但我认为 OP 有一个不同的问题,因为他们不会从测试体内发出 Intent 。

最佳答案

如果你像我一样在运行单元测试时看到这个错误,但你并不关心测试代码的 putExtra 部分,你可以使用:

android {
// ...
testOptions {
unitTests.returnDefaultValues = true
}
}

在您应用的 build.gradle 文件中。

关于android - 在测试 : "Method putExtra in android.content.Intent not mocked" 中创建 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41172775/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com