Android Unit Test (一)
由於最近上了SkillTree的TDD課程,加上學費也不少…沒有整理的話應該很快就會忘,所以我就嘗試以Android 的方式來重現上課的內容。觀念會稍微提到而已,最主要的內容會是實做為主。
Unit Test 的觀念
這些觀念其實網路上都有很多資源可以查的到,在這裡只是提供關鍵字
3A 原則
- Arrange : 初始化
 - Act : 執行測試動作
 - Assert : 驗證
 
FIRST
- Fast : 快速驗證
 - Independent : 測試之間不會有相依關係
 - Repeatable : 每次執行的測試都是會是一樣的
 - Self-Validating : 能自我驗證
 - Timely : 測試碼要比production code 早完成
 
Android 建置環境
接下來的幾篇都會以下列的環境為主
- Android Studio 1.4
 - JDK 7
 
開始第一個Unit Test
這邊要驗證的是一個簡單的加法,為了快速上手。暫時不採用TDD的做法(先寫測試)
1. 建立空白專案
要開甚麼專案都行,Android TV , Android Wear 也沒關係,本節重點是放在測試程式
2. 建立 MyMath 類別並實做加法
public class MyMath {
    public int add(int first, int second){
        return first + second;
    }
}
3. 建立測試類別
請見下圖,Android Studio 專案的測試程式預設是放在 src/androidTest/java/(packageName) 底下,在這裡建立一個”MyMathTest”的類別
4. 撰寫測試程式碼
要驗證加法是不是正確,我們需要輸入、實際輸出、以及期待的輸出結果。在這個例子中,輸入是1跟2,期待的輸出結果是3,要是實際輸出等於期待輸出,本次測試就會通過。
public class MyMathTest extends AndroidTestCase{
    public void test_add_first_1_second_2_equals_3(){
        //arrange
        int first = 1;
        int second = 2;
        int expect = 3;
        MyMath myMath = new MyMath();
        //act
        int actual = myMath.add(first, second );
        //assert
        assertEquals(expect, actual);
    }
}
Tip:
- 為了能夠運行測試,MyMathTest 要繼承AndroidTestCase。
 - assert為單元測試的基礎,assert的結果會決定這次測試的是否通過,在本例中expect 與 actual 值一樣的話 assertEquals()就會通過
 
5. 執行測試
可選擇使用模擬器或實機來執行測試
等待一段時間後,可以看到綠燈,代表測試通過!!