Junit5单元测试使用详解

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

猜你喜欢

转载自blog.csdn.net/zhanglixin999/article/details/120568706