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
1
2
执行结果: