3

根據this other question,因此能夠從一個Service啓動Activity我該如何測試我的Android服務是否啓動了特定的活動?

我該如何在ServiceTestCase單元測試中將正確的Intent傳遞給startActivity()

ActivityUnitTestCase具有有用的方法getStartedActivityIntent()。我已經能夠測試相反 - Activity開始Service -in ActivityUnitTestCase通過ContextWrapper到其setActivityContext()方法,如在this other question

ServiceTestCase似乎沒有等效的getStartedActivityIntent()setActivityContext()這將幫助我在這裏。我能做什麼?

回答

2

原來,答案是正確的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; 
} 
+0

所以這只是我的一個愚蠢的錯誤,沒有注意到明顯命名的'setContext()'方法,但我想我會留下它以防萬一它幫助別人。 –

相關問題