相信有許多人知道開發有一個重要的環節就是進行測試,不管是透過直接操作功能、打 API 或是程式內部執行測是程式等等都是測試的一種,今天要介紹的單元測試就是指測試程式碼最小功能單位的運作。

單元測試目的

  • 測試功能運作邏輯
  • 確保不會改壞程式

單元測試特性

  • 一次只測一個功能點或一個 api
  • 可被自動化運行
  • 各單元測試互相獨立,不依賴

JUnit 5 介紹

Java 常見的開源測試框架,目前最新版本為 JUnit5,使用了 Java 8 及更高版本的 Java 語言特性。 進行單元測試的可讀性更強,編寫更容易,且可以輕鬆擴充。

版本相容注意

Spring Boot 版本 相容的 JUnit 版本
≤ 2.1 JUnit 4
2.2, 2.3 JUnit 4、JUnit 5
≥ 2.4 JUnit 5

Spring Boot 導入 JUnit

通常只要建立一般 web 的專案就會導入 spring-boot-starter-test 裡面就會包含 Junit 測試框架了

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

導入注意

  • 測試程式放到 test 資料夾
  • class 名稱保持原本 class 加上 Test 為結尾
  • 測試的 package 結構和原本一致 (下圖紅框及橘框的結構)## 建立一個測試程式

先建立一個 Calculator 類別並有一個 add 方法:

1
2
3
4
5
6
public class Calculator {
public static int add(int x, int y) {
return x + y;
}
}

依照前面導入注意在 test 資料夾下面建構與 main 相同的結構,並建立一個 class 並依照對應的命名規則來建立。

或是你使用 intellij 可以對這個個類別或是方法按下 Alt + Insert (Windows) 或 command + N (Mac) 來叫出特殊功能選單並選 test 就可以看到編輯器會自動幫我們建立對應的 package 結構至 test 內,並且可以選擇自動產生哪些對應內部 class 有的方法至新的測試程式內。
https://ithelp.ithome.com.tw/upload/images/20240926/20150977G3JJ1bKSQt.png

建立一個測試程式

先建立一個 Calculator 類別並有一個 add 方法:

1
2
3
4
5
6
public class Calculator {
public static int add(int x, int y) {
return x + y;
}
}

依照前面導入注意在 test 資料夾下面建構與 main 相同的結構,並建立一個 class 並依照對應的命名規則來建立。

或是你使用 intellij 可以對這個個類別或是方法按下 Alt + Insert (Windows) 或 command + N (Mac) 來叫出特殊功能選單並選 test 就可以看到編輯器會自動幫我們建立對應的 package 結構至 test 內,並且可以選擇自動產生哪些對應內部 class 有的方法至新的測試程式內。
https://ithelp.ithome.com.tw/upload/images/20240926/20150977bWVt0xm0OU.png

建立測試程式測試 add 方法,要在方法上面加入 @Test 告訴 Spring Boot 這是測試程式

1
2
3
4
5
6
7
8
9
10
11
12
13
class CalculatorTest {

@Test
void testAdd() {
Calculator calc = new Calculator();
int x = 1;
int y = 1;

int result = calc.add(x, y);

assertEquals(2, result);
}
}

assertEquals() 就是斷言方法,可以幫助我們驗證預期結果,這邊就先確定測是可以正常運行,我們放入第 1 個參數是預期值及第 2 個是實際結果,如果帶入的兩個值相等就會通過測試。
https://ithelp.ithome.com.tw/upload/images/20240926/20150977L9TZTv5s5U.png

如果有寫好多個測試方法想要一次跑完,就可以點選 class 左方的圖示一次執行全部的測試
https://ithelp.ithome.com.tw/upload/images/20240927/20150977h7RY71N0Z7.png

這一篇先完成基本的測試方法建立,下一篇會詳細介紹更多的斷言用法。


Ref:

  • Java 工程師必備!Spring Boot 零基礎入門 (hahow 課程)
  • JUnit 5 User Guide