本文介紹如何在 Eclipse ADT 中建立並運行 Android 應用測試程序。在閱讀本文以前,你應該先看 Managing Projects from Eclipse 和 Building and Running from Eclipse 章節,這些章節是關於如何建立一個 Android 應用的,並提供了一些經過 ADT 建立和運行一個應用程序的基本流程。你也可能想先看看 Testing Funamentals 章節,它提供了對 Android 測試框架的一個總覽。html
ADT 具備一下特性,這些特性有利於咱們有效的設置、管理咱們的測試環境:android
若是你不是在 Eclipse 中作開發,或者你想學一下若是經過命令行來建立、運行測試程序,那麼輕參考 Testing from Other IDEs。app
Creating a Test Project框架
要爲 Android 應用程序設置一個測試環境,首先必須建立一個獨立的工程來控制測試代碼。新的工程要遵循普通 Android 應用的目錄結構。該工程含有(同普通 Android 工程)相同類型的內容和文件,好比源代碼文件、資源文件,還有一個 manifest 文件,等等……。你所建立的測試工程經過它的 manifest 文件中的 <instrumentation> 標籤關聯到它的待測應用程序。eclipse
經過 「New Android Test Project」 對話框能夠很容易地建立一個新的測試工程,而且這個工程會擁有一個合適的結構,manifest 文件中也會包含 <instrumentation> 標籤。任什麼時候候你均可以用該對話框建立測試工程。該對話框只有在你建立一個新的 Android 主應用程序工程後纔會出現,可是你也能夠用它來爲以前已經建立的工程建立測試工程。ide
用 Eclipse ADT 建立一個測試工程:函數
在 Eclipse 中,選擇 File > New > Other。這樣就打開了對嚮導對話框。工具
在該對話框中的下拉列表嚮導中找到 Android,而後點擊左邊的 toggle 按鈕。而後選擇 Android Test Project,而後點擊對話框底部的 Next。New Android Test Project 嚮導就打開了。測試
到了 Test Project Name,輸入一個工程名字。儘管能夠取任意的名字,可是你可能想把這個名字和待測應用程序的名字聯繫起來。一個簡單的辦法是把待測應用的工程名字加一個 「Test」 作爲測試工程的名字。這樣這個名字就會成爲推薦項目路徑的一部分,不要緊,在下一步你能夠修改它。ui
檢查 content 面板中工程的推薦路徑。若是選中了 Use default location 那麼嚮導就會把 workspath 和你輸入的工程名字串起來做爲工程的推薦路徑。例如,若是你的 workspace 是 /usr/local/workspace,工程名字是 MyTestApp,那麼嚮導就會推薦 /usr/local/workspace/MyTestApp。要本身選擇一個路徑,就要去掉 Use default location 的選擇,而後輸入或者選擇一個想要的工程路徑。要詳細瞭解關於工程位置的問題,請查看 Testing Fundamentals。
在測試目標面板,能夠設置一個已存在的 Android 工程做爲待測工程,點擊 Browse,而後從列表中選擇一個 Android 應用。如今嚮導已經完成了 Test Target Package,Application Name,和 Package Name fields(後兩項在屬性面板中)。
在 Build Target 面板選擇待測應用用的 Android SDK。
點擊 Finish 結束嚮導。若是 Finish 按鈕是 disabled,請查看向導對話框頂部的錯誤信息,fix 全部問題。
Creating a Test Package
建立一個測試工程後還須要建立一個測試包。這個測試包不須要 Activity,可是若是你願意也能夠定義一個。雖然你的測試包裏能夠有 Activity 類,test case 類或者普通類,可是你的主要 test case 應該繼承自一個 Android test case 類或者 JUnit 類,由於這些類提供了最好的測試功能。
測試包不須要 Android GUI。當在 Eclipse ADT 中運行這個測試包時,它的結果顯示在 JUnit 視圖中。如何運行測試以及查看結果,在 Running Tests 部分有詳細描述
要建立測試包,要先了解一個 Android 的 test case 類,它們定義在 一個定義在 android.test 包中。這些類繼承自 JUnit TestCase 類。而且,爲了對 Activity 進行測試,針對測試 Activity 對象的類還提供了 instrumentation。關於 test case 類的更詳細信息請參考 Testing Fundamentals。
在建立測試包以前,要先爲測試類選定一個 Java 包標識符,還有 Android 包名。更多詳情請參考 Testing Fundamentals。
在工程中新增一個 test case 類:
如今必須確保構造函數設置是正確的。JUnit 要求爲 test case 類建立一個沒有參數的構造函數。構造函數的第一句話要調用基類的構造函數。每一個 test case 基類都有一個構造函數簽名,更多詳情請參考 android.test 文檔中的類文檔。
咱們須要經過覆寫 setUp() 和 tearDown 函數來控制測試環境:
另外一個有用的作法是在測試類中添加 testPreconditions() 函數。用這個函數來測試待測應用是否正確初始化。過這個測試失敗了,那麼就是初始化環境出錯。若是是這樣,那麼無論測試成功與否,進一步的測試都不可信。
Activity Testing 教程對如何建立 test case 類和測試函數有更詳細的闡述。
Running Tests
當你在 Eclipse ADT 中運行測試包,輸出就顯示在 Eclipse JUnit 視圖中。既能夠運行整個測試包,也能夠運行一個 test case 類。運行測試的時候,是 Eclipse 調用 adb 命令,而後 adb 命令運行測試包,並顯示輸出結果,因此在 Eclipse 中運行測試和經過命令行運行沒什麼區別。
和其它應用同樣,在 Eclipse ADT 中運行測試電腦必須鏈接一臺設備或者用一個 Android 模擬器。若是用模擬器,必須用和待測包用一樣 API 的虛擬設備(AVD)。
在 Eclipse 中運行測試有兩種方式:
下一部分講解如何建立、運行測試配置。
經過運行測試配置來運行一組測試:
控制檯會顯示一系列消息來展現測試運行的工程。每一個消息都以一個時間戳和一個文件名開頭,文件名錶示該消息的來源。例如,當在一個沒有徹底啓動的模擬器中運行測試時就會顯示下面的消息:
[yyyy-mm-dd hh:mm:ss - testfile] Waiting for HOME ('android.process.acore') to be launched...
接下來,在對這些消息的描述中,devicename 是指運行測試的設備或者模擬器的名字,prot 是指設備的端口號,devicename 和 port 都是 adb devices 命令格式中用到的。testfile 是指正在運行測試工程的 apk 文件名,appfile 是待測工程的文件名。
HOME is up on device 'devicename-port'
Uploading testfile onto device 'devicename-port'
Installing testfile
.Success!
下面幾行是一個示例的信息:
[2010-07-01 12:44:40 - MyTest] HOME is up on device 'emulator-5554'
[2010-07-01 12:44:40 - MyTest] Uploading MyTest.apk onto device 'emulator-5554'
[2010-07-01 12:44:40 - MyTest] Installing MyTest.apk...
[2010-07-01 12:44:49 - MyTest] Success!
instrumentation_class 是指你指定的 instrumentation test runner 的完整類名,test runner 通常是 InstrumentationTestRunner。
Collecting test information
而後是
Sending test information to Eclipse
下面是一個示例測試的信息:
[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 視圖中。分爲上下兩個窗口,頂部窗口顯示摘要,底部窗口顯示跟蹤棧信息。
頂部窗口包含測試信息,在窗口的頂部會顯示下面信息:
頂部窗體內部顯示測試運行的詳細信息。對每個 test case 類都有一行顯示它的類名。點擊這一行左邊的箭頭展開能夠查看該類中單個測試函數。如今你一查看該類中的每個測試函數,右邊它花費的時間。若是雙擊函數名,Eclipse 就會在編輯窗口打開測試類的源代碼,並把焦點移到該函數的第一行。
圖片1顯示一個測試成功的結果
圖片1
底部窗口顯示了跟蹤棧的信息。若是你在頂部窗口中選中一個失敗的測試,底部窗口就會顯示該測試的跟蹤棧信息。若是雙擊一個和你的代碼相對應的行,就會在編輯窗口高亮顯示發生錯誤的代碼。針對成功的測試底部窗口就是空的。
圖片2顯示了一個失敗的測試。
圖片2