文章目錄
Junit5單元測試使用詳解
常用註解介紹
功能含義
註解 | 功能 |
---|---|
@Test | 表示該方法是一個測試方法 |
@ParameterizedTest | 表示該方法是一個參數化測試 |
@RepeatedTest | 表示該方法是一個重複測試的測試模板 |
@TestInstance | 用於配置所標註的測試類的 測試實例生命週期 |
@DisplayName | 爲測試類或測試方法聲明一個自定義的顯示名稱 |
@BeforeEach | 表示使用了該註解的方法應該在當前類中每一個測試方法之前執行 |
@AfterEach | 表示使用了該註解的方法應該在當前類中每一個測試方法之後執行 |
@BeforeAll | 表示使用了該註解的方法應該在當前類中所有測試方法之前執行(只執行一次),並且它必須是 static方法(除非@TestInstance 指定生命週期爲Lifecycle.PER_CLASS ) |
@AfterAll | 表示使用了該註解的方法應該在當前類中所有測試方法之後執行(只執行一次),並且它必須是 static方法(除非@TestInstance 指定生命週期爲Lifecycle.PER_CLASS ) |
@Tag | 用於聲明過濾測試的tag標籤,該註解可以用在方法或類上 |
@Disable | 用於禁用(或者說忽略)一個測試類或測試方法 |
對比Junit4
Junit4 | Junit5 |
---|---|
@Test | @Test |
@BeforeClass | @BeforeAll |
@AfterClass | @AfterAll |
@Before | @BeforeEach |
@After | @AfterEach |
@Ignore | @Disabled |
@Category | @Tag |
測試控制流程
maven依賴導入
導入依賴:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
</dependencies>
基本測試@Test示例
import org.junit.jupiter.api.*;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class TestDemo {
@BeforeAll
public void beforeAll(){
System.out.println("------測試環境搭建完成------");
}
@AfterAll
public void afterAll(){
System.out.println("------測試環境清理完成------");
}
@BeforeEach
public void beforeEach(){
System.out.println("------測試前置方法執行------");
}
@AfterEach
public void afterEach(){
System.out.println("------測試後置方法執行------");
}
@Test
@DisplayName("test 1")
public void myTest1(){
System.out.println("------測試方法1執行------");
}
@Test
@DisplayName("test 2")
public void myTest2() {
System.out.println("------測試方法2執行------");
}
}
測試運行結果:
參數化測試@ParameterizedTest示例
@ValueSource單一參數測試
- 可以指定ints,strings,bytes等各種基本類型參數
- 只支持單一參數的方法
- 指定多個參數的含義是執行多次該方法,每次傳入一個參數
@ParameterizedTest
@ValueSource(ints = {1,2,3})
public void valueSourceTest(int i){
System.out.println("------測試數據:" + i + "------");
}
執行結果:
@CsvSource多參數測試
- 支持多個不同類型參數
@ParameterizedTest
@CsvSource({"aaa,1","bbb,2"})
public void csvSourceTest(String s,int i){
System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
}
執行結果:
@MethodSource多參數測試
- 要求在測試類上注
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
- @MethodSource要傳入方法名作參數
@ParameterizedTest
@MethodSource("methodSource")
void methodSourceTest(String s,int i){
System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
}
Stream<Arguments> methodSource() {
return Stream.of(
Arguments.of("aaa",1),Arguments.of("bbb",2));
}
執行結果:
@CsvFileSource文件參數測試
- 以行爲單位,每一行就是一個測試數據
code:
@ParameterizedTest
@CsvFileSource(resources = "/test.csv")
void csvFileSourceTest(String s,int i){
System.out.println("------測試數據:s=" + s + ",i=" + i + "------");
}
test.csv:
aaa,1
bbb,2
執行結果: