也許我錯過了一些東西。我想爲BroadcastReceiver編寫測試用例;具體來說,它用於接收BOOT_COMPLETED事件併爲另一個接收器設置一個警報以供稍後處理;它似乎沒有正確設置,但重點是我沒有明顯的方式來測試它。我無法準確連接調試器並等待BOOT_COMPLETED,也無法發送假的BOOT_COMPLETED廣播。爲什麼沒有用於BroadcastReceiver的測試儀器?
爲什麼有活動,服務和提供程序的檢測類,但不是BroadcastReceiver?任何測試這個建議?
也許我錯過了一些東西。我想爲BroadcastReceiver編寫測試用例;具體來說,它用於接收BOOT_COMPLETED事件併爲另一個接收器設置一個警報以供稍後處理;它似乎沒有正確設置,但重點是我沒有明顯的方式來測試它。我無法準確連接調試器並等待BOOT_COMPLETED,也無法發送假的BOOT_COMPLETED廣播。爲什麼沒有用於BroadcastReceiver的測試儀器?
爲什麼有活動,服務和提供程序的檢測類,但不是BroadcastReceiver?任何測試這個建議?
BroadcastReceiver的生命週期沒有什麼神奇的。用一個AndroidTestCase進行測試就足夠了。在測試用例中,實例化您的BroadcastReceiver,創建您想要發送的Intent,並使用AndroidTestCase提供的Context或某些模擬上下文調用onReceive。
E.g.
public class TestMyBroadcastReceiver extends AndroidTestCase {
public void testReceive() {
MyBroadcastReceiver r = new MyBroadcastReceiver();
Intent i = new Intent("MY_ACTION");
// TODO put extras
r.onReceive(getContext(), i);
// TODO query application state to verify results
}
}
在大多數情況下我與https://stackoverflow.com/a/5181010/527016
完全一致然而有情況下,當延伸AndroidTestCase
是不合適的(和可能導致的意外)。特別是,如果您正在進行更復雜的集成測試,並且想要使用系統發送的實際Intent
來測試BroadcastReceiver
。主要原因是廣播接收機中的onReceive
方法在主應用程序線程上運行,而AndroidTestCase
中的測試運行在另一個線程中。這可能會導致代碼中與測試相關的線程問題不能在多線程上運行。
解決方案是從InstrumentationTestCase
代替您的測試的子類,並使用@UiThreadTest
註釋使測試在與onReceive
方法相同的線程上運行。
欲瞭解更多信息(和示例),請參閱:http://olafurhelgason.blogspot.com/2012/12/threading-and-android-integration.html
簡單,沒有工作! – Robert 2015-04-13 20:36:28