单元测试
- JUnit5组成
JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎
- 使用JUnit5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
- 在JUnit5的基础上继续使用JUnit4
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
- JUnit5常用注解
● @Test :表示方法是测试方法。但是与JUnit4的@Test不同,他的职责非常单一不能声明任何属性,拓展的测试将会由Jupiter提供额外测试
● @ParameterizedTest :表示方法是参数化测试
● @RepeatedTest :表示方法可重复执行
● @DisplayName :为测试类或者测试方法设置展示名称
● @BeforeEach :表示在每个单元测试之前执行
● @AfterEach :表示在每个单元测试之后执行
● @BeforeAll :表示在所有单元测试之前执行
● @AfterAll :表示在所有单元测试之后执行
● @Tag :表示单元测试类别,类似于JUnit4中的@Categories
● @Disabled :表示测试类或测试方法不执行,类似于JUnit4中的@Ignore
● @Timeout :表示测试方法运行如果超过了指定时间将会返回错误
● @ExtendWith :为测试类或测试方法提供扩展类引用
- @DisplayName
@SpringBootTest
@DisplayName("junit5功能测试类")
public class Junit5Test {
@DisplayName("测试前置条件")
@Test
void testassumptions(){
System.out.println("111111");
}
}
- @BeforeEach、@AfterEach、@BeforeAll、@AfterAll
@SpringBootTest
@DisplayName("junit5功能测试类")
public class Junit5Test {
@BeforeEach
void testBeforeEach() {
System.out.println("测试就要开始了...");
}
@AfterEach
void testAfterEach() {
System.out.println("测试结束了...");
}
@BeforeAll
static void testBeforeAll() {
System.out.println("所有测试就要开始了...");
}
@AfterAll
static void testAfterAll() {
System.out.println("所有测试以及结束了...");
}
}
-
测试@BeforeAll、@AfterAll时,需点击
-
@Disabled
@SpringBootTest
@DisplayName("junit5功能测试类")
public class Junit5Test {
@Disabled
@DisplayName("测试方法2")
@Test
void test2() {
System.out.println(2);
}
}
- @Timeout
@SpringBootTest
@DisplayName("junit5功能测试类")
public class Junit5Test {
/**
* 规定方法超时时间。超出时间测试出异常
* @throws InterruptedException
*/
@Timeout(value = 500, unit = TimeUnit.MILLISECONDS)
@Test
void testTimeout() throws InterruptedException {
Thread.sleep(600);
}
}
- @ExtendWith
@SpringBootTest = @BootstrapWith(SpringBootTestContextBootstrapper.class) + @ExtendWith(SpringExtension.class)
# @SpringBootTest这里接入的是spring boot提供的测试平台
# 如果想接入其他测试平台,则使用@ExtendWith修改
- @RepeatedTest(5)
@SpringBootTest
@DisplayName("junit5功能测试类")
public class Junit5Test {
@RepeatedTest(5) // 表示执行多少次
@Test
void test3() {
System.out.println(5);
}
}