Testing from Eclipse with ADT 翻譯

本文介紹如何在 Eclipse ADT 中建立並運行 Android 應用測試程序。在閱讀本文以前,你應該先看 Managing Projects from Eclipse Building and Running from Eclipse 章節,這些章節是關於如何建立一個 Android 應用的,並提供了一些經過 ADT 建立和運行一個應用程序的基本流程。你也可能想先看看 Testing Funamentals 章節,它提供了對 Android 測試框架的一個總覽。html

ADT 具備一下特性,這些特性有利於咱們有效的設置、管理咱們的測試環境:android

  • 能夠快速建立一個測試工程並關聯到待測程序。在建立測試工程時會自動在待測工程的 manifest 文件插入所需的 <instrumentation> 元素。
  • 快速導入待測應用的類,這樣測試程序就能夠測試它們了。
  • 測試程序的運行時可配置的,包括要傳給 Android 測試框架的標誌(flags)。
  • 沒必要脫離 Eclipse 就能夠運行測試程序。ADT 自動 build 測試程序和待測程序,根據須要把它們安裝到你的設備或者模擬器上,而且在 Eclipse 一個獨立的窗口中顯示結果。

若是你不是在 Eclipse 中作開發,或者你想學一下若是經過命令行來建立、運行測試程序,那麼輕參考 Testing from Other IDEsapp

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,而後點擊對話框底部的 NextNew 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 類:

  • Project Explorer 面板中打開測試工程,而後打開 src 目錄。
  • 找到嚮導建立的 Java 包標識符。若是裏面尚未加入類文件,該節點就沒有子節點,那麼它就顯示一個沒有被填充的圖標。若是你想修改該標識符,就右鍵點擊它,選擇 Refactor > Rename,而後輸入新的名字。
  • 好了,再次用右鍵點擊這個 Java 包標識符,選擇 New > Class。這樣就會顯示 New Java Class 對話框,而且相應 Source FolderPackage 已經設置好了。
  • 在名字輸入框中輸入 test case 類的名字,方法之一就是把待測組件的類名再加上一個 「Test」,例如,若是你要對 MyActivity 進行測試,那麼 test case 的類名應該是 MyActivityTest。保留 pulibc 修飾符。
  • Superclass 輸入框中輸入你要繼承的 Android test case 類的名字。也能夠在可用的類中找一個。
  • 取消 Which method stubs would you like to create? 中的全部選項,而後點擊 Finish。你要手動設置構造函數。
  • 在編輯面板就能夠看到新建的類了。
  • 如今必須確保構造函數設置是正確的。JUnit 要求爲 test case 類建立一個沒有參數的構造函數。構造函數的第一句話要調用基類的構造函數。每一個 test case 基類都有一個構造函數簽名,更多詳情請參考 android.test 文檔中的類文檔。

    咱們須要經過覆寫 setUp() 和 tearDown 函數來控制測試環境:

  • setUp():在類文件中,該函數會在調用任何測試函數以前被調用。咱們用這個函數來設置測試環境(the test fixture)。你能夠在 setUp() 中實例化一個 Intent 對象,把 action 設置爲 ACTION_MAIN,而後用這個 Intent 啓動待測 Activity。
  • tearDown():在類中的全部的測試函數被調用後就會調用該函數。在這個函數裏面咱們能夠進行垃圾回收和重置測試環境。

另外一個有用的作法是在測試類中添加 testPreconditions() 函數。用這個函數來測試待測應用是否正確初始化。過這個測試失敗了,那麼就是初始化環境出錯。若是是這樣,那麼無論測試成功與否,進一步的測試都不可信。

Activity Testing 教程對如何建立 test case 類和測試函數有更詳細的闡述。

Running Tests


當你在 Eclipse ADT 中運行測試包,輸出就顯示在 Eclipse JUnit 視圖中。既能夠運行整個測試包,也能夠運行一個 test case 類。運行測試的時候,是 Eclipse 調用 adb 命令,而後 adb 命令運行測試包,並顯示輸出結果,因此在 Eclipse 中運行測試和經過命令行運行沒什麼區別。

和其它應用同樣,在 Eclipse ADT 中運行測試電腦必須鏈接一臺設備或者用一個 Android 模擬器。若是用模擬器,必須用和待測包用一樣 API 的虛擬設備(AVD)。

在 Eclipse 中運行測試有兩種方式:

  • 像運行普通應用同樣,從工程的上下文菜單中選擇 Run As… > Android JUnit Test,或者點擊主菜單上的 Run 菜單項。
  • 針對測試包建立一個 Eclipse 運行配置。這對於你想把測試分爲多組的狀況頗有用,每組都由從測試工程中選出的測試組成。運行測試配置,就能夠運行一組測試。

下一部分講解如何建立、運行測試配置。

經過運行測試配置來運行一組測試:

  1. 在 Package Explorer 視圖中選中測試工程,而後選擇主菜單中的 Run > Run Configurations…彈出 Run Configurations 對話框。
  2. 在左邊的面板中找到 Android JUnit Test。在右邊的面板中點擊 Test 標籤。」Project:」文本框顯示工程名字。「Test class」下拉框顯示測試工程中的一個測試類。
  3. 若是隻運行一個測試類,就選中 Run a single test,而後在 「Project:」文本框中輸入工程的名字,在「Test class」下拉框中選擇類名。
  4. 若是要運行全部的測試類,就選中 Run all tests in the selected project, or package,而後在文本框內輸入工程名或者包名。
  5. 設置 Target 標籤。
    1. 可選:若是用模擬器,就選擇 Automatic,而後在 Android Virtual Device(AVD)選擇表中選擇一個存在的 AVD。
    1. 在 Emulator Lanuch Parameters 面板中設置要使用的 Android 模擬器標記。詳細信息請參考 Android Emulator
  6. 點擊 Common 標籤。在 Save As 面板中,若是要把該配置保存到本地請選擇 Locally (應用於當前工程),若是應用於其它工程請選擇 Shared。
  7. 可選:把配置加到運行工具欄和 Favorites 菜單中:在 Display in Favorites 面板中選中 Run 前面的 checkbox。
  8. 可選:把配置加到測試菜單和工具欄中:選擇 Debug 旁邊的 checkbox。
  9. 點擊 Close 保存配置。注意:雖然你如今就能夠直接點 Run 運行測試,可是最好先保存配置,而後經過點擊 Eclipse 工具欄來運行。
  10. 點擊 Eclipse 工具欄中綠色 Run 按鈕旁邊的向下箭頭,就會顯示一個運行&測試配置菜單。
  11. 選擇剛剛建立的配置啓動測試。

控制檯會顯示一系列消息來展現測試運行的工程。每一個消息都以一個時間戳和一個文件名開頭,文件名錶示該消息的來源。例如,當在一個沒有徹底啓動的模擬器中運行測試時就會顯示下面的消息:

[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 是待測工程的文件名。

  • 若是在模擬器中運行測試,而且模擬器尚未啓動,那麼 Eclipse 首先會啓動模擬器。啓動完成後就會顯示下面的信息:

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!

  • 接下來的信息就是 Launching instrumentation instrumentation_class on device devicename-port

instrumentation_class 是指你指定的 instrumentation test runner 的完整類名,test runner 通常是 InstrumentationTestRunner。

  • 接下來是 InstrumentationTestRunner 編譯須要執行的一系列測試,你會看到:

Collecting test information

而後是

Sending test information to Eclipse

  • 最後,你會看到 Running tests 信息,這包括你運行的全部測試。至此,你應該開始在 JUnit view 裏面查看測試結果了。當測試結束時,你會在控制檯看到 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 視圖中。分爲上下兩個窗口,頂部窗口顯示摘要,底部窗口顯示跟蹤棧信息。

頂部窗口包含測試信息,在窗口的頂部會顯示下面信息:

  • 測試包使用的總時間(顯示爲:Finished after x seconds)
  • 運行測試總數(Runs:)測試類中測試函數的個數
  • 錯誤數(Errors:) 測試運行發生的程序錯誤&程序異常個數
  • 失敗個數(Failures:)測試失敗的個數。這是斷言失敗的個數。就是沒有錯誤發生,測試也能夠是失敗的。
  • 一個進度條,當測試運行時這個進度條從左到右步進。若是全部測試都成功進度條就是綠色的,若是有一個測試失敗進度條就會從綠色變爲紅色。

頂部窗體內部顯示測試運行的詳細信息。對每個 test case 類都有一行顯示它的類名。點擊這一行左邊的箭頭展開能夠查看該類中單個測試函數。如今你一查看該類中的每個測試函數,右邊它花費的時間。若是雙擊函數名,Eclipse 就會在編輯窗口打開測試類的源代碼,並把焦點移到該函數的第一行。

圖片1顯示一個測試成功的結果

figure1

圖片1

底部窗口顯示了跟蹤棧的信息。若是你在頂部窗口中選中一個失敗的測試,底部窗口就會顯示該測試的跟蹤棧信息。若是雙擊一個和你的代碼相對應的行,就會在編輯窗口高亮顯示發生錯誤的代碼。針對成功的測試底部窗口就是空的。

圖片2顯示了一個失敗的測試。

failure2

圖片2

相關文章
相關標籤/搜索