根据this other question,可以从Activity启动Service
如何在ServiceTestCase中进行单元测试以确保正确的Intent通过startActivity()
ActivityUnitTestCase有一个有用的方法。我已经能够通过将agetStartedActivityIntent()传递到它的Activity方法中,比如在this other question中,来测试aServiceActivityUnitTestCase中启动aContextWrapper的逆过程。
但是setActivityContext()似乎没有与ServiceTestCasegetStartedActivityIntent()等价的词,这对我有帮助。我能做什么?

最佳答案

结果在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;
}

08-03 20:45