2017-07-11 112 views

回答

2

如果您使用的是ActivityTestRule,那麼這樣的事情呢?

Intents.init(); 
Intent intent = // Build your intent 

rule.launchActivity(intent); 

// Assertions  

Intents.release() 

我並不是一個真正的咖啡的用戶,但我假設將啓動活動,並onNewIntent()將被調用。然後做出你的斷言。

注意:這是使用專爲此目的設計的Espresso Intent庫。
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2'

+0

謝謝,它工作正常,但顯示我的錯誤:無法在45秒內啓動意向意圖。也許主線程在合理的時間內沒有閒置? –

+0

Espresso Intents旨在處理被測應用程序發送** out **的意圖。這裏沒有必要使用它。你可以在[intro](https://developer.android.com/training/testing/espresso/intents.html)中閱讀它 –

1

方法onNewIntent()是公共的,所以你實際上可以直接調用它:

activityTestRule.getActivity().onNewIntent(new Intent()) 

這實際工作,而是因爲你在呼喚從測試應用程序線程的方法,它不是太好。如果調用onNewIntent()將導致UI上的任何更改,您將得到一個異常,因爲只有創建視圖的線程才能更改它。爲了解決這個問題,您可以強制UI線程

activityTestRule.getActivity().runOnUiThread(() -> { 
    activityTestRule.getActivity().onNewIntent(new Intent())); 
}); 

上運行這將允許您測試活動的onNewIntent()方法。

順便說一句,你說的是你的問題,你還想檢查一下被定義爲singleTop的行爲。而不是直接調用該方法,你就可以開始實際應在活動引發onNewIntent()下測試的活動:

Intent intent = new Intent(activityTestRule.getActivity().getApplicationContext(), ActivityUnderTest.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

InstrumentationRegistry.getTargetContext().startActivity(intent)); 

這應該結束了通話活動的onNewIntent()下測試,只要它被定義爲singleTop,否則它會啓動一個新的活動實例。

相關問題