Table of Contents
ToggleJUnit 5 Order
測試用例排序, 可以按照方法名稱、註解或隨機、自定義名稱等方式,讓測試方法按照符合預期的排序輸出,在某些情況下,執行順序可能成為測試應用程序功能的重要因素,像是整合測試時,建立新帳號、更新帳號,然後刪除帳號等,需要有先後順序來驗證功能是否完整,採用單元測試來驗證產出結果。
檔案目錄
./
+- build.gradle
+- src
+- main
| +- resources
| | +- junit-platform.properties
+- test
| +- org
| +- ruoxue
| +- spring_boot_168
| +- test
| +- junit5
| +- JUnit5OrderMethodNameTest.java
| +- JUnit5OrderAnnotationTest.java
| +- JUnit5OrderRandomTest.java
| +- JUnit5OrderDisplayNameTest.java
註解說明
提供多樣化的註解宣告。
Annotations | Description |
---|---|
@TestMethodOrder | 排序方式。 |
MethodOrderer.MethodName | 方法名稱排序。 |
MethodOrderer.OrderAnnotation | 註解排序。 |
MethodOrderer.Random | 隨機排序。 |
MethodOrderer.DisplayName | 顯示名稱排序。 |
@Order | 測試方法排序。 |
單元測試
JUnit 5 MethodOrderer MethodName
依照方法名稱排序。
package org.ruoxue.spring_boot_168.test.junit5;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
@TestMethodOrder(MethodOrderer.MethodName.class)
public class JUnit5OrderMethodNameTest {
@Test
public void itWorldZ() {
System.out.println("itWorldZ");
}
@Test
public void itWorldA() {
System.out.println("itWorldA");
}
@Test
public void itWorldB() {
System.out.println("itWorldB");
}
@Test
public void itWorldY() {
System.out.println("itWorldY");
}
@Test
public void itWorldC() {
System.out.println("itWorldC");
}
@Test
public void itWorldX() {
System.out.println("itWorldX");
}
}
itWorldA
itWorldB
itWorldC
itWorldX
itWorldY
itWorldZ
JUnit 5 MethodOrderer OrderAnnotation
依照 @Order 註解排序。
package org.ruoxue.spring_boot_168.test.junit5;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JUnit5OrderAnnotationTest {
@Test
public void itWorld6() {
System.out.println("itWorld6");
}
@Order(3)
@Test
public void itWorld1() {
System.out.println("itWorld1");
}
@Order(1)
@Test
public void itWorld2() {
System.out.println("itWorld2");
}
@Test
public void itWorld5() {
System.out.println("itWorld5");
}
@Order(2)
@Test
public void itWorld3() {
System.out.println("itWorld3");
}
@Test
public void itWorld4() {
System.out.println("itWorld4");
}
}
itWorld2
itWorld3
itWorld1
itWorld4
itWorld5
itWorld6
JUnit 5 MethodOrderer Random
隨機排序,每次執行的順序都不一樣,因為隨機種子預設是採 System.nanoTime() ,在測試類的靜態初始化期間產生的,所以若要固定每次隨機產出的結果相同,則要在 junit-platform.properties 設定隨機種子 。
junit-platform.properties
junit.jupiter.execution.order.random.seed=168
package org.ruoxue.spring_boot_168.test.junit5;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
@TestMethodOrder(MethodOrderer.Random.class)
public class JUnit5OrderRandomTest {
@Test
public void itWorldZ() {
System.out.println("itWorldZ");
}
@Test
public void itWorldA() {
System.out.println("itWorldA");
}
@Test
public void itWorldB() {
System.out.println("itWorldB");
}
@Test
public void itWorldY() {
System.out.println("itWorldY");
}
@Test
public void itWorldC() {
System.out.println("itWorldC");
}
@Test
public void itWorldX() {
System.out.println("itWorldX");
}
}
itWorldC
itWorldA
itWorldX
itWorldY
itWorldB
itWorldZ
JUnit 5 MethodOrderer DisplayName
顯示自定義的名稱排序。
package org.ruoxue.spring_boot_168.test.junit5;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
@TestMethodOrder(MethodOrderer.DisplayName.class)
public class JUnit5OrderDisplayNameTest {
@DisplayName("itWorld1")
@Test
public void itWorldZ() {
System.out.println("itWorldZ");
}
@DisplayName("itWorld2")
@Test
public void itWorldA() {
System.out.println("itWorldA");
}
@DisplayName("itWorld3")
@Test
public void itWorldB() {
System.out.println("itWorldB");
}
@DisplayName("itWorld4")
@Test
public void itWorldY() {
System.out.println("itWorldY");
}
@DisplayName("itWorld5")
@Test
public void itWorldC() {
System.out.println("itWorldC");
}
@DisplayName("itWorld6")
@Test
public void itWorldX() {
System.out.println("itWorldX");
}
}
itWorldZ
itWorldA
itWorldB
itWorldY
itWorldC
itWorldX
心得分享
可以使用不同的排序規則,輸出測試用例方法,決定方法的執行順序,當有特殊任務需求,可以採使用以上排序方式進行對測試方法排序,若無特別需求,建議按預設排序方式進行測試即可達成任務。