原文地址:http://developer.android.com/tools/testing/testing_eclipse.html
這篇文章講述如何在帶有ADT外掛程式的eclipse中建立和運行android 應用測試。在閱讀 本文前,你應該知道如何經過基本步驟利用ADT外掛程式建立和運行android應用程式,這在Managing Projects fromEclipse和Building
and Runningfrom Eclipse中有描述。你也許需要閱讀一下Building and Runningfrom Eclipse,它提供了android測試的概述。
ADT外掛程式提供了如下幾個特性來協助你快速的搭建和管理測試環境:
- 它可以快速地建立一個測試工程並且連結到被測試應用,當它建立測試工程時,它會自動在測試包的manifest檔案中插入需要的
<instrumentation>元素。
- 它可以讓你輕鬆地匯入被測試應用的類,這樣你的測試項可以檢查它們。
- 你可以用它來為測試包建立運行參數,並且把它們放入到被傳入到android測試架構的flag中。
- 它可以讓你在不離開eclipse的環境下運行測試包,ADT會自動編譯被測試包和測試包,將它們安裝到裝置或者模擬器上,運行測試包,在eclipse的一個單獨視窗中顯示測試結果。
如果你不是在eclipse中開發或者你想學習一下如何通過命令列工具來建立和運行測試,可以參見Testing from Other IDEs。
建立一個測試工程
要為你的android應用程式設定測試環境,你必須先建立一個單獨的工程來管理測試代碼。這個新工程一樣遵循一般的android應用的目錄結構,它包含同樣的內容和檔案,比如原始碼、資源檔、一個manifest檔案以及其它。這個建立的測試包通過manifest檔案中的<instrumentation>元素連結到被測試應用。
“建立一個android測試工程”的對話方塊讓你很輕鬆地產生一個目錄結構清晰的測試工程,它的manifest檔案中已經包含了<instrumentation>元素。你隨時可以用這個“建立一個android測試工程”的對話方塊來建立一個測試工程。這個對話方塊會在你建立一個android應用程式後出現,但是你也可以運行它來為之前建立的一個工程建立一個測試工程。
要在eclipse中建立一個測試工程:
1. 在eclipse中,選擇File>New>Other,將會出現一個“選擇一個嚮導”的對話方塊。
2. 在對話方塊中的“嚮導”列表中,找到“android”,點擊左邊的切換按鈕,選擇“android測試工程”,然後點擊對話方塊底部的“下一步”,“建立一個android測試工程”的嚮導就出現了。
3. 在“測試工程名稱”旁邊輸入工程名,你可以使用任意名稱,但是你應該會希望將名稱和被測試應用的工程名稱相關聯,一個好辦法是在被測試工程的名稱後面加上字串“Test”,然後將它作為測試工程的名稱。
4. 在“內容”部分,檢查給你推薦的工程路徑。如果“使用預設位置”處於選中,嚮導會將工作區路徑和你輸入的工程名串連起來作為建議路徑。例如,如果你的工作區路徑是/usr/local/workspace,你的工程名是MyTestApp,那麼嚮導會推薦/usr/local/workspace/MyTestApp。要輸入你希望的路徑,取消選中“使用預設路徑”,然後輸入或者瀏覽你期望的工程目錄。
要瞭解更多關於測試工程的直接選取,可以參加 Testing Fundamentals。
5. 在“測試目標”部分,選中“已存在項目”,然後在列表中選擇android應用。你可以看到現在嚮導已經為你完成了測試目標、應用程式名稱以及包名(後面兩個都在屬性面板中)。
6. 在“編譯目標”面板中,選擇被測試應用使用的android SDK 版本。
7. 點擊“完成”完成嚮導。如果“完成”不可點擊,查看嚮導頂部的錯誤資訊並且修複。
建立一個測試包
建立一個測試工程後,你需要用到測試包。這個包不需要Activity,當然如果願意你也可以定義 一下。儘管你的測試包整合了Activity類、test case 類以及其它類,你的主要的test case應該繼承自一個android test case 類或者JUnit類,因為是它們提供測試特性。
測試包不需要有GUI,當你在eclipse中運行測試包時,結果會顯示在JUnit視圖中,在Running Tests部分更詳細地描述了運行測試和查看結果。
要建立一個測試包,從android.test中的某個android test case類開始,這些類繼承了JUnit TestCase類,android中測試Activity的類為測試Activity提供了instrumentation。要瞭解更多test case 類,參見
Testing Fundamentals。
在你建立測試包前,你應該為你使用的test case類選擇一個包名以及android 包名。要瞭解更多,可以參見 Testing Fundamentals。
要在工程中添加一個test case類:
1. 在“工程瀏覽器”標籤頁,開啟你的測試工程並且開啟src檔案夾。
2. 找到建立工程嚮導設定的java 包名,如果你還沒有添加類,該包名下會沒有內容,而且它的icon是沒有填充的。如果你想修改包名,右擊包名並且選擇 Refactor > Rename,然後輸入新的包名。
3. 完成之後,重新右擊包名並且選擇New > Class,將會出現一個“建立Java 類"的對話方塊,其中的"source folder"和”package"都已經設定好了。
4. 在“名稱”地區,為test case類輸入一個名稱。一個設定類名的方法是在你測試的組件類的後面加上"Test"。例如,如果你在測試MyAppActivity類,你的test case類名則為MyAppActivityTest。test case類的修飾符設定為public。
5. 在“父類”欄,輸入你所繼承的android test case 類的名字,你也可以瀏覽可用類。
6.在“Which method stubs would you like to create?”欄,取消所有的可選項,然後點擊“結束”,你將要手動設定構造方法。
7. 你的新類將出現在一個新的java編輯面板中。
你現在應該確保建構函式被正確地設定,為你的類建立一個無參建構函式,JUnit需要它。在建構函式的第一條語句中調用父類的構造方法。每個 test case 父類都有它自己的建構函式簽章,查閱android.test中類的文檔來擷取更多資訊。
為了控制測試環境,你需要覆寫setUp()和tearDown()方法:
- setUp():該方法會在類中的每一個測試方法執行前調用。它可以用來初始化測試環境,你可以在setUp()中執行個體化一個action為ACTION_MAIN的Intent,然後在測試中使用這個Intent啟動Activity。
- tearDown():該方法會在類中 的每一個測試方法執行後調用。你可以用它來執行記憶體回收以及重設測試環境。
另一個很有用的做法是在你的測試類別中添加testPreconditions()方法,用這個方法來檢驗被測試包是否正確初始化。如果該測試項失敗,那麼初始測試環境有問題,如果是這樣,那麼後面的測試結果都值得懷疑,不管測試是否成功。
教程Activity Testing中包含更多關於建立測試類別和方法的資訊。
運行測試
當你在裝有ADT外掛程式的eclipse中運行一個測試包的時候,輸出將會出現在eclipse的JUnit視圖中。你可以運行整個測試包或者其中給一個test case類。eclipse是通過執行adb命令來運行一個測試包並且顯示輸出,所以,在eclipse中運行測試和從命令列中運行測試沒有區別。
就像其它應用程式套件,要在eclipse中運行一個測試包你必須串連一台裝置到你的電腦或者使用模擬器,如果你使用模擬器,你必須有一個和測試包有相同API版本的android虛擬設備。
要在eclipse中執行測試,你有兩種辦法:
- 像運行一個應用一樣運行測試。選擇工程右鍵菜單或者主菜單"Run"欄中的“Run as" > "Android JUnit Test"。
- 為測試工程建立一個運行參數。這在有多套測試,每套測試包含工程中選中的測試項時非常有用,執行運行參數就可以運行整套測試。
要用運行參數來建立和運行一整套測試:
1. 在包瀏覽器中,選擇測試工程,然後在主菜單中選擇“Run” > "Run Configurations",彈出“運行參數”對話方塊。
2. 在昨天窗格中找到"android JUnit Test",在右邊窗格中點擊"Test”欄,文字框"Name:"顯示工程名稱,下拉框“Test class:"顯示項目中的一個測試類別。
3. 要運行一個單獨的測試類別,選中"Run a single test",然後在文字框"Project:"中輸入項目名,在文字框"Test class"中輸入類名;要運行所有的測試類別,選中"Run all tests in the selected project, or package",然後在文字框中輸入項目名或者包名。
4. 點擊"Target"欄,如果你正在使用模擬器,那麼選擇"automatic",然後在android虛擬設備表中選擇一個現有的AVD,在模擬器啟動參數面板設定你想使用的android模擬器flag,這些在 Android Emulator中詳細描述。
5. 點擊"common"欄,在"Save as"部分,選擇"Local file"以儲存僅供自己使用的運行參數,或者選擇"Shared file"儲存到其它項目中。
6. 將運行參數添加到"Run"工具列和"Favorites"菜單:在"Display in favorites menu"面板"Run"旁邊的複選框。
7. 要添加運行參數到"Debug"菜單和工具列中,選中"Debug"旁邊的複選框。
8. 要儲存你的設定,點擊"Close"就可以。注意:儘管你可以點擊"Run"立即運行測試,你應該先儲存測試參數然後從eclipse的工具列中選擇並運行。
9. 在eclipse的工具列中,點擊綠色"Run"箭頭旁邊的下拉式箭頭將會顯示已經儲存的運行參數和調試參數列表。
10. 選擇你之前建立的運行參數,測試就會開始。
測試的工程會在控制台中以訊息的形式出現,每條訊息前面都帶有時間以及它對應的.apk檔案名稱。例如,在你通過模擬器運行一項測試,而模擬器尚未啟動時下面這條訊息會出現:
[yyyy-mm-dd hh:mm:ss - testfile] Waiting for HOME ('android.process.acore') to be launched...
在下面關於訊息的描述中,"devicename"是你正在用來測試的裝置或者模擬器的名稱,"port"是裝置的連接埠號碼。"devicename"和"port"都是使用的adb devices命令所使用的格式。同樣的,"testfile"是正在測試的測試包的.apk檔案名稱,"appfile"是被測試應用的檔案名稱。
- 如果你正在使用模擬器並且還沒有啟動它,那麼eclipse會先啟動模擬器,之後你會看到下面的訊息:
HOME is up on device 'devicename-port'
- 如果你還沒有安裝測試包,你會看到下面的訊息:
Uploading testfile onto device 'devicename-port'
然後是訊息:
Installing testfile.
最後是訊息:
Success!
下面是這個訊息列的一個例子:
[2010-07-01 12:44:49 - MyTest] Project dependency found, installing: MyApp[2010-07-01 12:44:49 - MyApp] Uploading MyApp.apk onto device 'emulator-5554'[2010-07-01 12:44:49 - MyApp] Installing MyApp.apk...[2010-07-01 12:44:54 - MyApp] Success!
- 接下來你會看到訊息:
Launching instrumentation instrumentation_class on device devicename-port
instrumentation_class是你指定的instrumentation test runner的全名,通常是InstrumentationTestRunner。接下來InstrumentationTestRunner編譯需要執行的測試,你會看到訊息:
Collecting test information
之後是
Sending test information to Eclipse
最後你會看到訊息
Running tests
表明測試正在運行,此時你應該開始在JUnit視圖中查看測試結果。當測試結束時,你將會看到訊息
Test run complete
表明測試已經結束。下面是這個訊息列的一個例子:
[2010-01-01 12:45:02 - MyTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554[2010-01-01 12:45:02 - MyTest] Collecting test information[2010-01-01 12:45:02 - MyTest] Sending test information to Eclipse[2010-01-01 12:45:02 - MyTest] Running tests...[2010-01-01 12:45:22 - MyTest] Test run complete
測試結果顯示在JUnit視圖中,它被分為上面的一個描述概要的窗格和下面的一個跟蹤堆棧資訊的窗格。
上面的窗格包含測試資訊,在窗格的頂部可以看到下列資訊:
- 測試回合的總時間(寫作“XXX秒後結束”)。
- 測試項的數量(Runs):整個測試類別中的測試項數目。
- 錯誤的數量(Errors):測試過程中程式錯誤和發生異常的數量。
- 失敗的數量(Failures):測試過程中測試失敗的次數,這是宣告失敗的次數,測試項可以在程式不發生任何錯誤的情況下失敗。
- 一個進度條:進度條會在測試回合過程中從左向右增長,如果所有測試成功,進度條保持綠色,如果有一項測試失敗,進度條就由綠色變為紅色。
上面窗格的表單包含測試回合的詳情,對於每一個啟動並執行test case類,你都可以看到帶有該類名稱的行,要查看該類中單個的測試方法的測試結果,你可以點擊左邊的箭頭來展開這一行,你現在可以看到類中的每個測試方法以及它啟動並執行時間。雙擊一個測試方法,eclipse會在編輯器窗格中開啟測試類別的代碼並且將焦點移到測試方法的第一行。
測試成功的結果如所示:
下面的窗格是跟蹤堆棧資訊的,如果你選中上面窗格中失敗的測試方法,下面的窗格中會顯示該測試的堆疊追蹤資訊,如果其中有一行指向你代碼中的地方,你可以雙擊它以在編輯器視窗中顯示代碼,同時程式碼會高亮顯示。如果測試是成功的,下面的窗格將會是空的。
下面是測試結果為失敗時的顯示: