Environment
1. Install New Software 2. 選擇Work with: Juno - http://download.eclipse.org/releases/juno 3. Programming Language -> Eclipse Java Development Tools 4. Next然後進行安裝
|
建置測試專案
假設有一需要被測試的專案叫做MyProject
先依照android官方建議的結構建立test專案
http://developer.android.com/tools/testing/testing_android.html#TestProjects
1. 右鍵 -> New -> Project -> Android Test Project
2. 建入Project Name,建議以要測試的專案為prefix ex: MyProject -> MyProjectTest
3. Location選擇已MyProject的根目錄 ex: D:\Dropbox\Public\Company\Projects\Personal\Playfair\Test
4. Finish後,Eclipse會自動以專案名稱為prefix,新增一資料夾MyProjectTestTest至MyProject根目錄
5. 在MyProjectTestTest右鍵 -> Refactor -> Rename 將資料夾名稱改成tests
6. Import MyProjectTest專案至workspace
7. 修改並新增原有的src package成以下三種,代表三種執行方式: com.xxx.test.android: 只能透過Android JUnit test執行 com.xxx.test.android.fun: 可透過兩種方式執行,但必須沒有Android API才可以使用JUnit test執行 com.xxx.test.java: 只能透過JUnit test執行 ※針對整個Project只能進行Android JUnit test執行,並且會跳過only裡的測項
|
產生測試碼
依照不同的類型有不同的建立方式:
com.xxx.test.android:
1. New -> Class 2. Name填入測試class名稱,通常以相對應的class名稱為prefix ex: MainActivity -> MainActivityTest 3. Superclass選擇android.test.ActivityInstrumentationTestCase2<T> 4. Finish 5. 將ActivityInstrumentationTestCase2<T>的T修正為所對應到的class名稱 ex: ActivityInstrumentationTestCase2<T> -> ActivityInstrumentationTestCase2<MainActivity> 6. 建立一建構函式如下 public MainActivityTest() { super(MainActivity.class); } 7. 接著就可以開始編寫測試函式,測試函式必須皆有test的prefix ex: testFun, testFun2... 測試程序預設會依照行數由上至下執行所有非建構式的函式,如要跳過某些函式,可以使用以下方式 ※將函式設成private/protected,但須注意單獨執行此class時,這些函式不會被跳過而報錯(class not public) ※測試函式加上特殊tag(@Small/Medium/LargeTest),就可以在測試前進入Run configurations中指定只跑特定tag的測項 8. 透過setUp可以在每個測試函式執行前做初始化設定,並在tearDown做回收的動作 @Before public void setUp() throws Exception { super.setUp(); } @After public void tearDown() throws Exception { super.tearDown(); }
|
com.xxx.test.android.fun:
1. New -> Class 2. Name填入測試class名稱,通常以相對應的class名稱為prefix,由於此部分class無法以Activity方式執行,而只能測試函式正確性 所以prefix後可再加上Fun來跟com.xxx.test.android內的test class做區分 ex: MainActivity -> MainActivityFunTest 3. Superclass選擇junit.framework.TestCase 4. Finish 5. 由於ActivityInstrumentationTestCase2繼承最終來自於TestCase,所以測試函式的行為和撰寫方式皆與com.xxx.test.android內的相同 6. 同樣可使用setUp/tearDown進行初始化和回收的動作
|
com.xxx.test.java:
1. New -> JUnit Test Class 2. 選用New JUnit 4 Test 3. Name填入測試class名稱,通常以相對應的class名稱為prefix,由於此部分class無法執行與android相關的API,所以加上JUnit為prefix 來跟com.xxx.test.android和com.xxx.test.android.fun內的test class做區分 ex: MainActivity -> MainActivityJUnitTest 4. 勾選底下setUpBeforeClass/tearDownAfterClass/setUp/tearDown,讓系統自動建立 5. Finish 6. 接著就可以開始編寫測試函式,測試函式不一定要有test的prefix,預設依照行數由上至下執行所有有加上@test的函式,如要跳過某些函式,可 以使用@ignore 7. setUp/tearDown功能如前述,setUpBeforeClass/tearDownAfterClass則是在整個class測試的前後進行 @BeforeClass public static void setUpBeforeClass() throws Exception { // 此訊息可在console看到 System.out.println("@BeforeClass"); } @AfterClass public static void tearDownAfterClass() throws Exception { // 此訊息可在console看到 System.out.println("@tearDownAfterClass"); } @Before public void setUp() throws Exception { // 此訊息可在console看到 System.out.println("@setUp"); } @After public void tearDown() throws Exception { // 此訊息可在console看到 System.out.println("@tearDown"); } 8. 首次執行會有Invalid layout of java.lang.String at value的錯誤,在執行前須進入Run configurations設定以下: a. Classpath -> 刪除Bootstrap Entries下的android專案 b. JRE -> 選擇Excution environment -> 選擇任一 ※如有透過Install New Software安裝Eclipse Java Development Tools,這邊應該有選項,任一即可 9. 加上@Test(expected=ArithmeticException.class)可以檢查測試函式是否有拋出ArithmeticException
|