根据另一个问题,可以从Service
启动Activity
。
在ServiceTestCase
中,我如何对正确的Intent
传递给startActivity()
进行单元测试?
CCD_ 6具有有用的方法CCD_。我已经能够在ActivityUnitTestCase
中通过将ContextWrapper
传递到其setActivityContext()
方法中来测试相反的情况——Activity
启动Service
,就像在另一个问题中一样。
但ServiceTestCase
似乎没有getStartedActivityIntent()
或setActivityContext()
的等价物,这对我有帮助。我能做什么?
证明ServiceTestCase
的文档中的答案是正确的。
其中是与setActivityContext()
的等价物,它被称为setContext()
。因此,您可以调用getContext()
,用ContextWrapper
包装上下文,然后调用setContext()
,就像使用ActivityUnitTestCase
一样。例如:
private volatile Intent lastActivityIntent;
@Override
protected void setUp() throws Exception {
super.setUp();
setContext(new ContextWrapper(getContext()) {
@Override
public void startActivity(Intent intent) {
lastActivityIntent = intent;
}
});
}
protected Intent assertActivityStarted(Class<? extends Activity> cls) {
Intent intent = lastActivityIntent;
assertNotNull("No Activity started", intent);
assertEquals(cls.getCanonicalName(), intent.getComponent().getClassName());
assertTrue("Activity Intent doesn't have FLAG_ACTIVITY_NEW_TASK set",
(intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0);
return intent;
}