背景
近期參與了一個Anroid醫療項目,當中項目底層有非常多基礎類及通訊類,並且非常多涉及復雜的字節操作還有多線程同步及狀態機處理。這種項目做一下TDD還是必要的,盡量項眼下期把風險減少一些。
如今的問題是本人使用的是IntelliJ開發的Android項目,剛開始還真不知道怎么下手。在參考了一些資料后。總結了一下IntelliJ中配置JUnit測試環境的步驟,希望對大家有幫助。
環境:
操作系統:Windows 7
IntelliJ版本號:13.1
Android SDK API:19
Java Version:1.7
JUnit 4子版本號:JUnit 4.11(IntelliJ自帶)
步驟:
一、在項目的AndroidManifest.xml文件里做例如以下更改:
在application節點下加入
<uses-library android:name="android.test.runner"/>,如圖:


在根節點下加入例如以下內容:


當中targetPackage跟你所在項目的包名同樣(參見你的AppManifest.xml文件頂部:

二、為你所在項目加入例如以下jar包引用
1、junit-4.11
2、harmcrest-core-1.3
3、annotations
三、調整項目對jar包的引用順序

做這個調整是由於我們使用的Android API中包括了JUnit 3.8,默認SDK是放在最前面的。否則代碼中的Junit會被覺得是Junit 3.8,那你就僅僅能使用Junit 3的測試方式了。
四、在項目文件夾樹中,創建一個與src平級的文件夾用於存放全部的測試類。
簡單起見我使用的是tests.

除了創建文件夾。我們還須要指定新創建的文件夾為測試根文件夾:
右鍵tests文件夾,選擇'Mark Directory As'--->'Test Sources Root'

五、在你的測試根文件夾下創建你的測試分類文件夾及詳細的測試類
在測試類內部你須要的僅僅是給測試方法加上@Test標注。
六、執行你的測試
1、在代碼編輯界面,在你的測試方法體中點擊右鍵,在彈出的菜單中選中以JUnit的方式執行

這樣的方式很適合剛寫完測試。亟待看到某個測試的執行結果的場景。
另一種使用快捷鍵的方式來單獨執行某個測試,我們僅僅須要將文本焦點切換到某個測試方法中,然后在使用組合鍵Ctrl+Shift+F10就能夠達到同上面一樣的測試效果。
2、編輯執行Configuration
點擊Configurationbutton,在彈出界面中按例如以下步驟創建一個JUnit執行配置

在彈出的配置窗體做簡單的配置。
詳細配置細節請參見本文參考部分的《IntelliJ IDEA對JUnit支持的官方文檔》部分。
這樣的方式適合於批量運行測試的場景。
回想JUnit3的使用方式
1、讓你的測試類繼承自Testcase
2、每一個測試方法名必須以小寫test為前綴
備注:IntelliJ IDEA已經內部支持JUnit4,Android SDK中也至少對JUnit3做了支持。因此並不須要再從Maven中對JUnit進行依賴管控。
除非你須要使用最新的JUnit中的某項特性。
更新:
2014-10-16: 在開啟JUnit4.0功能后項目中涉及Android生命周期的測試類(比方AndroidTestCase)將沒有辦法執行。原因在於AndroidTestCase這些是由SDK支持的,可是SDK中引用的是JUnit3.8的類庫,我的理解是假設你引用的是JUnit4.0,那么在執行時AndroidTestCase這些Android特有的測試依賴的JUnit3.8在執行時是不會載入的。測試執行器嘗試載入該類測試時就會報錯。 因此,假設你希望在你的項目中測試與Android生命周期相關的類的話,那就僅僅能在項目中摒棄JUnit4。
參考:
在IntelliJ IDEA的項目中開啟Annotations
IntelliJ IDEA對JUnit支持的官方文檔
IntelliJ IDEA提供的JUnit測試的Sample項目
ADT中怎樣配置JUnit
JUnit4測試說明:
JUnit4在IntelliJ IDEA中的使用(應該有三篇,可是僅僅有后兩篇可見。可能第一篇就是將配置的,可是不可見--有點遺憾)
Android單元測試初探--Instrumentation
IntelliJ IDEA和ADT的持續測試插件Infinitest
ADT中使用JUnit的一個教程
一個老程序猿的Android測試驅動開發實踐系列3篇(主要側重界面交互測試)