概述
JUnit 是Java生态系统中最受欢迎的单元测试框架之一。
Maven依赖关系
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
该版本需要Java8才能工作。
架构
- JUnit平台
- JUnit Jupiter
- JUnit Vintage
JUint平台
该平台负责在JVM上启动测试框架,它在JUnit及其客户端(如构建工具)之间定义了一个稳定而强大的接口。该平台可轻松将客户端与JUint集成,以发现和执行测试。它还定义了TestEngineAPI,用于开发在JUnit平台上运行的测试框架。通过实现自定义TestEngine,我们可以将第三方测试库直接插入JUnit。
JUnit Jupiter
此模块包括用于在JUnit5中编写测试的新编程和扩展模型。与JUnit4相比,新的注解包括:
注解 | 含义 |
---|---|
@TestFactory | 表示作为动态测试的测试工厂的方法 |
@DisplayName | 定义测试类或测试方法的自定义显示名称 |
@Nested | 表示带注解的类是嵌套的非静态测试类 |
@Tag | 声明用于过滤测试的标记 |
@ExtendWith | 注册自定义扩展 |
@BeforeEach | 表示带注解的的方法将在每个测试方法执行之前执行(代替@Before) |
@AfterEach | 表示带注解的方法将在每个测试方法执行之后执行(代替@After) |
@BeforeAll | 表示带注解的方法将在该类所有方法执行之前执行(代替@BeforeClass) |
@AfterAll | 表示带注解的方法将在该类所有方法执行之后执行(代替@AfterClass) |
@Disable | 禁用测试类或方法(代替@Ignore) |
JUnit Vintage
JUnit Vintage支持在JUnit5上运行基于JUnit3和JUnit4的测试。
基本注解
@BeforeAll和@BeforeEach
@BeforeAll
static void setup() {
log.info("@BeforeAll - executes once before all test methods in this class");
}
@BeforeEach
void init() {
log.info("@BeforeEach - executes before each test method in this class");
}
具有@BeforeAll注解的方法必须是静态的。
@DisplayName 和Disable
@DisplayName("Single test successful")
@Test
void testSingleSuccessTest() {
log.info("Success");
}
@Test
@Disabled("Not implemented yet")
void testShowSomething() {
}
我们可以使用注解更改显示名称或禁用带有注解的方法。
AfterEach和@AfterAll
@AfterEach
void tearDown() {
log.info("@AfterEach - executed after each test method.");
}
@AfterAll
static void done() {
log.info("@AfterAll - executed after all test methods.");
}
带有@AfterAll注解的方法也必须是静态的。
@Test
为了识别测试,我们将添加@Test注解。我们可以在一个类中拥有任意数量的@Test方法,但是提倡将相关内容放在放在一起。另外注意,测试不能说是私有的,也不能有返回值,否则它将会被忽略。
断言和假设
JUint试图充分利用Java 8的新功能,尤其是Lambda表达式。
断言
断言是支持在测试中断言条件的方法,这些方法可通过JUni