2010-06-09 221 views
28

我正在致力於Android的推送通知庫(http://deaconproject.org/),當網絡連接中斷或更改時需要採取措施 - 即需要重新啓動服務器連接或暫停其操作,直到網絡連接可用。這似乎工作正常使用和Android的BroadcastReceiver「android.net.ConnectivityManager.CONNECTIVITY_ACTION」。如何禁用/啓用網絡,在Android模擬器切換到Wifi?

我的問題是在測試庫 - 我想在不同的配置條件下自動測試庫對斷開的網絡連接或從3G到WiFi的轉換的響應。問題是,我不想和模擬器坐在一起,並且整天碰到F8。

有沒有辦法在jUnit測試中以編程方式操作Android上的網絡連接,而無需訴諸切換飛行模式?我已經嘗試通過控制檯向模擬器發出命令,操縱GSM模式等,但當顯示器上的電話狀態發生變化時,互聯網連接仍然保持。

+1

你有沒有設法找到解決這個問題? – pehrs 2011-06-23 06:45:10

+0

也想知道答案。有任何想法嗎? – 2012-02-03 12:59:57

+0

另請參閱[這個問題](http://stackoverflow.com/questions/8198889/testing-in-airplane-mode-in-android-emulator)。 – 2012-05-26 12:21:46

回答

7

在「項目瀏覽器」面板中右鍵單擊項目,選擇「運行方式」,然後選擇「運行配置」。

在模態顯示窗口的左側選擇「Android應用程序」,並在同一窗口的右側選擇標籤「目標」。

在窗口的底部,在「模擬器啓動參數」部分中,您有關於互聯網連接的衆多選項。

我希望這有助於。

Igor

+7

謝謝你的回答 - 這是朝着正確方向邁出的一步。仿真器啓動參數可以在啓動時調整網絡連接,但我們正在尋找一種在運行時以編程方式執行該操作的方法。 「正在測試」的庫必須響應Android廣播內容(例如android.net.ConnectivityManager.CONNECTIVITY_ACTION),以便將其狀態調整爲設備的網絡狀態。我們需要的是一種在JUnit測試中更改網絡狀態的方法,以便我們可以驗證Intents是否已被正確接收並採取了適當的操作... – mtbkrdave 2010-07-19 12:29:58

4

您可能也想看看eclipse中的模擬器控制視圖。目前我沒有太多的運氣來殺死我的數據,但它看起來像應該

alt text

+0

雖然通過控制檯ADB連接,但我已嘗試過此選項似乎並沒有真正消除連接性;儘管我關閉了GSM數據連接,但網絡流量仍然有效。我在這裏尋找的是一種以編程方式實現它的方法 - 在自動化測試(如JUnit測試)的範圍內。 – mtbkrdave 2010-08-18 13:16:43

+0

我有同樣的問題(溝通似乎繼續)。這聽起來像是你已經找到了一種通過ADB shell編寫腳本的方法(它是否應該再次開始工作,或者我們偶然發現了適當的控制命令)。僅供參考我也已經能夠切換一些網絡設置(雖然同樣的問題存在)通過telnet到em and和GSM數據關閉和GSM GSM語音關閉命令阿拉http://stackoverflow.com/questions/2577785/ringing-myself-使用-Android模擬器/ 2578245#2578245 – Chris 2010-08-18 14:19:28

+0

感謝您的提示,將這些狀態更改爲'未註冊'爲我工作。不過,不知道單元測試。 – Walf 2012-03-08 05:34:46

6

我發現Android Dev Tools應用真的很有幫助。

它允許您操縱網絡連接等重要的系統設置。它甚至可以讓你設置一個時間間隔,在這個時間間隔內自動開啓和關閉WiFi,從而允許你測試網絡相關的廣播接收機。

如果你想真正的 開發設備上安裝開發工具的應用程序,你可以在應用程序從你的模擬器 複製,然後使用ADB設備上安裝它。要複製從正在運行的仿真應用 ,執行:

adb -e pull /system/app/Development.apk ./Development.apk 

這會將.apk文件到當前目錄。然後在連接的設備上安裝 :

adb -d install Development.apk 

enter image description here

+3

這對那些希望手動操作網絡狀態的人很有幫助,但是這裏的問題是尋找一種以編程方式(即從單元測試中)這樣做的方法。這可以通過發送到開發工具應用程序的意圖完成嗎? – mtbkrdave 2011-08-23 11:38:35

4

不幸的是,有沒有辦法從編程單元測試中真正禁止網絡訪問。我爲此問題提交了Android enhancement request

0

一個簡單但有點長而沉重的解決方案是在您的wifi連接狀態監視器上添加一個抽象層。

添加一個實體(NetworkStateManager),它應該是一個應用程序範圍的單例(請參閱RoboGuice或Dagger乾淨地,或通過您的應用程序實例訪問唯一實例)。

使用Observable Observer設計模式添加註冊方法,取消註冊此實體的偵聽器。

每個活動都必須在onStart中註冊,在onStop中取消註冊。

該實體本身將由BroadCastReceiver修改。

這是完全可測試的,如果您使用DI框架,您將能夠在活動中注入可驅動的存根並查看它們對網絡狀態更改的反應。

相關問題