根据this other question,可以从Activity
启动Service
。
如何在ServiceTestCase
中进行单元测试以确保正确的Intent
通过startActivity()
?ActivityUnitTestCase
有一个有用的方法。我已经能够通过将agetStartedActivityIntent()
传递到它的Activity
方法中,比如在this other question中,来测试aService
在ActivityUnitTestCase
中启动aContextWrapper
的逆过程。
但是setActivityContext()
似乎没有与ServiceTestCase
或getStartedActivityIntent()
等价的词,这对我有帮助。我能做什么?
最佳答案
结果在the docs for 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;
}