網頁

2018/3/4

什麼是單元測試(Unit Test)

單元測試(Unit Test)用來檢查一個獨立工作單位的行為,在Java應用程式中這個獨立的工作單位通常是一個方法(Method)。單元測試用來確認一個方法在接收特定的輸入後是否會得到預期的輸出。相對於單元測試,整合測試(Integration Test)是指檢查數個元件之間的互動。

例如下面是一個簡單的類別Calculator,有一個方法addInteger(int x, int y)

public class Calculator {
  
  public int addInteger(int x, int y) {
    return x + y;
  }

}

addInteger(int x, int y)就是單元測試中要被測試的一個工作單位。單元測試就是要檢查如果輸入x = 1,y = 2,則輸出是否為3? 這輸出的預期為開發者所認為應有的結果,如果是則pass(通過測試),如果否則fail(沒通過測試)。

而Java的單元測試框架為JUnit,下面使用JUnit的assertEquals(long expected, long actual)來對addInteger(int x, int y)進行測試。assertEquals(long expected, long actual)第一個參數為預期的值,第二個參數為實際輸出的值。

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class CalculatorTest {
  
  @Test
  public void testAddInteger(){
    Calculator cal = new Calculator();
    assertEquals(3, cal.addInteger(1, 2));
  }

}

而這個CalculatorTest.testAddInteger(...)就是一隻單元測試程式。

依習慣測試程式的類別名稱為被測試類別名稱後加"Test",例如上面被測試的類別名稱為Calculator,所以測試Calculator的類別命名為CalculatorTest。(原本在JUnit 3測試類別必須繼承TestCase類別,但到了JUnit 4就不用了,改直接在測試方法前加上@Test annotation。)

同樣地,依習慣測試程式的方法名稱為被測試方法名稱前加"test",例如上面被測試的方法名稱為addInteger,所以測試addInteger的方法命名為testAddInteger

除了以上還有其他命名習慣,可以參考這篇

如果覺得文章有幫助的話還幫忙點個Google廣告,感恩。


參考:

沒有留言:

張貼留言