9、单元测试

Java中的JUnit单元测试

Java原生并没有提供单元测试的方法,一般的简单测试使用main方法进行测试,但是如果对于复杂的测试,则需要使用第三方框架来实现,例如JUnit框架

官网:https://junit.org/junit5/

JUnit5 的组成:JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit5 建议使用 Java8 及以上版本

4和5的区别

JUnit4

JUnit5

SE项目不同IDE的使用

注解

Annotations 描述
@BeforeEach 在方法上注解,在每个测试方法运行之前执行。
@AfterEach 在方法上注解,在每个测试方法运行之后执行
@BeforeAll 该注解方法会在所有测试方法之前运行,该方法必须是静态的。
@AfterAll 该注解方法会在所有测试方法之后运行,该方法必须是静态的。
@Test 用于将方法标记为测试方法
@DisplayName 用于为测试类或测试方法提供任何自定义显示名称
@Disable 用于禁用或忽略测试类或方法
@Nested 用于创建嵌套测试类
@Tag 用于测试发现或过滤的标签来标记测试方法或类
@TestFactory 标记一种方法是动态测试的测试工场

常用测试方式

普通测试

@Test
void testDemo() {
}

重复性测试

@RepeatedTest(5)
void testDemo(TestInfo testInfo,RepetitionInfo repetitionInfo){

  System.out.println("repeat:" + testInfo.getDisplayName());
  System.out.println("这是第 "+ repetitionInfo.getCurrentRepetition()+ "次重复");

}

参数测试

@ParameterizedTest
@ValueSource(strings = {"java", "python", "go"})
void testDemo(String candidate) {
    assertTrue(candidate.contains("o"));
}

超时测试

@Test
@Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
void testDemo() {
    // fails if execution time exceeds 500 milliseconds
}