Skip to content

JUnit 5

junit-team/junit5: ✅ The 5th major version of the programmer-friendly testing framework for Java and the JVM (github.com)

使用

常用注解

AnnotationDescription
@Test标记为测试方法
@ParameterizedTest标记为参数化测试
@RepeatedTest多次执行
@TestFactory动态创建 Test。方法需返回DynamicNode
@TestClassOrder有多个嵌套测试类,标记需要排序。
@TestMethodOrder有多个嵌套测试方法,标记需要排序
@DisplayName定义该测试名称
@DisplayNameGeneration指定测试名称生成类
@BeforeEach在标记@Test, @RepeatedTest, @ParameterizedTest, @TestFactory 的方法执行前执行
@AfterEach在标记@Test, @RepeatedTest, @ParameterizedTest, @TestFactory 的方法执行后执行
@BeforeAll在所有测试方法执行前执行
@AfterAll在所有测试方法执行后执行
@Nested标记为嵌套测试
@Tag打个标记,再使用插件是可以过滤。
@Disabled忽略该测试
@Timeout指定超时时间
@TempDir临时目录
@Order执行顺序

断言

  • Equals
    • 断言是否相等 assertEqualsassertArrayEqualsassertNotEquals
  • Boolean
    • 断言 Boolean 类型 assertFalseassertTrue
  • Throw
    • 判断是否有异常 assertDoesNotThrowassertThrows
    • assertThrowsExactly判断完全异常是否完全相等
  • Timeout
    • 是否超时 assertTimeout(超时不会中断)
    • assertTimeoutPreemptively 超时时会中断

Conditional

  • @EnabledOnOs,根据操作系统判断

  • @EnabledForJreRange@EnabledOnJre ,@DisabledForJreRange,@DisabledOnJre根据Java运行环境

  • @DisabledInNativeImage,@DisabledInNativeImage判断是否在GraalVM

  • @EnabledIfSystemProperty@DisabledIfSystemProperty 根据系统参数判断

  • @EnabledIfEnvironmentVariable@DisabledIfEnvironmentVariable 根据环境变量判断

参数测试

使用不同的参数进行测试,使用@ParameterizedTest标记。

  • @NullSource null对象,不能对基础数据类型使用
  • @EmptySource 一个空值
  • @NullAndEmptySource 包含@NullSource@EmptySource
  • @ValueSource 一组参数
  • @EnumSource 一组枚举
  • @MethodSource 自定义方法返回参数,但是需要限定返回对象为
    • java.util.stream.Stream
    • java.util.stream.DoubleStream
    • java.util.stream.LongStream
    • java.util.stream.IntStream
    • java.util.Collection
    • java.util.Iterator
    • java.lang.Iterable
    • org.junit.jupiter.params.provider.Arguments
    • String[]
  • @CsvSource 使用 csv 格式的测试数据
  • @CsvFileSource 使用 csv 格式的测试数据

参数配置

配置方式

  • 通过构建工具的插件配置参数
  • 通过 JVM system properties
  • junit-platform.properties文件