2015年10月17日 星期六

Android Unit Test (一)

Android Unit Test (一)

由於最近上了SkillTreeTDD課程,加上學費也不少…沒有整理的話應該很快就會忘,所以我就嘗試以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. 撰寫測試程式碼

要驗證加法是不是正確,我們需要輸入實際輸出、以及期待的輸出結果。在這個例子中,輸入是12,期待的輸出結果是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. 執行測試

可選擇使用模擬器或實機來執行測試

等待一段時間後,可以看到綠燈,代表測試通過!!


沒有留言:

張貼留言