Junit5单元测试使用详解

文章目录

  • Junit5单元测试使用详解
      • 常用注解介绍
          • 功能含义
          • 对比Junit4
      • 测试控制流程
      • maven依赖导入
      • 基本测试@Test示例
      • 参数化测试@ParameterizedTest示例
          • @ValueSource单一参数测试
          • @CsvSource多参数测试
          • @MethodSource多参数测试
          • @CsvFileSource文件参数测试

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

测试控制流程

Created with Raphaël 2.2.0 开始 @BeforeAll注解方法 @BeforeEach注解方法 测试方法 @AfterEach注解方法 @AfterAll注解方法 结束

maven依赖导入

导入依赖:

    
        
            org.junit.jupiter
            junit-jupiter-engine
            5.2.0
        
        
            org.junit.jupiter
            junit-jupiter-params
            5.4.0
            test
        
    

基本测试@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执行------");
    }
}

测试运行结果:
Junit5单元测试使用详解_第1张图片


参数化测试@ParameterizedTest示例

@ValueSource单一参数测试
  • 可以指定ints,strings,bytes等各种基本类型参数
  • 只支持单一参数的方法
  • 指定多个参数的含义是执行多次该方法,每次传入一个参数
    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    public void valueSourceTest(int i){
        System.out.println("------测试数据:" + i + "------");
    }

执行结果:
Junit5单元测试使用详解_第2张图片


@CsvSource多参数测试
  • 支持多个不同类型参数
    @ParameterizedTest
    @CsvSource({"aaa,1","bbb,2"})
    public void csvSourceTest(String s,int i){
        System.out.println("------测试数据:s=" + s + ",i=" + i + "------");
    }

执行结果:
Junit5单元测试使用详解_第3张图片

@MethodSource多参数测试
  • 要求在测试类上注@TestInstance(TestInstance.Lifecycle.PER_CLASS)
  • @MethodSource要传入方法名作参数
    @ParameterizedTest
    @MethodSource("methodSource")
    void methodSourceTest(String s,int i){
        System.out.println("------测试数据:s=" + s + ",i=" + i + "------");
    }

    Stream methodSource() {
        return Stream.of(
                Arguments.of("aaa",1),Arguments.of("bbb",2));
    }

执行结果:
Junit5单元测试使用详解_第4张图片

@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

执行结果:
Junit5单元测试使用详解_第5张图片

你可能感兴趣的:(Java,junit5,测试,java)