我试图验证特定的额外内容是否已添加到 Intent 中,但我在 Android 单元测试中的 Intent 始终为 null。我有以下课程需要测试:
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);
}
}
测试如下(我也尝试使用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"));
}
}
您对我应该如何进行此测试有什么建议吗?
提前致谢
由于您正在尝试测试并做出断言Intent
如果对象是 Android 框架的一部分,而不仅仅是将其用作依赖项(您可以简单地模拟它),普通单元测试将无法工作,因为 Android 框架对象在单元测试中只是“空”测试替身。
这个单元测试+Android框架对象的限制是这里解释得更好.
您可以通过使用诸如以下的库来实现您想要的机器人电动,无需使用模拟器或设备即可测试 Android 框架类。该文档有一个断言示例Intent
可以指导您做您想做的事情的实例:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)