📅  最后修改于: 2023-12-03 14:43:37.154000             🧑  作者: Mango
JUnit Jupiter 是JUnit 5.x版本中的测试引擎,它提供了不同于之前版本的一些新特性,例如参数化测试和测试生命周期回调注解。
在本文中,我们将简单介绍JUnit Jupiter的使用及其创建测试的方法。
首先,我们需要在我们的项目中添加JUnit Jupiter依赖。
Gradle:
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2'
}
Maven:
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
</dependencies>
为了创建测试类,请先新建一个类,然后将其注释为 @Test
。
import org.junit.jupiter.api.Test;
class MyTests {
@Test
void firstTest() {
// test code goes here
}
}
这里的 @Test
是JUnit Jupiter中的注解,指示该方法是一个测试方法。
测试中最重要的功能之一是断言。JUnit Jupiter提供了多种断言方法,可以验证代码是否按预期运行。
以下是JUnit Jupiter中的一些常见断言方法:
assertTrue
:验证条件为真。assertFalse
:验证条件为假。assertEquals
:验证期望值与实际值相等。assertNotEquals
:验证期望值与实际值不相等。assertNull
:验证对象为 null
。assertNotNull
:验证对象不为 null
。例如:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MyTests {
@Test
void test() {
assertEquals(2, 1 + 1);
assertTrue(true);
}
}
这个例子使用 assertEquals
验证 1+1 是否等于 2,使用 assertTrue
验证 true 是否为真。
JUnit Jupiter中的参数化测试使我们可以使用不同的参数运行相同的测试用例,测试代码只需要实现一次即可。
以下是如何编写参数化测试的示例:
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import static org.junit.jupiter.api.Assertions.*;
class MyParamsTests {
static Stream<String> strings() {
return Stream.of("foo", "bar");
}
@ParameterizedTest
@MethodSource("strings")
void testWithMethodSource(String argument) {
assertNotNull(argument);
}
}
在此示例中,MethodSource
注解指示代表参数值的静态方法 strings()
在方法调用期间被检测,返回一个字符串流,并用它作为参数执行测试方法。
JUnit Jupiter提供了测试生命周期回调注解,它们将测试用例分成生命周期阶段,并允许在测试用例执行期间重写其中某些方法以获取更好的控制。
JUnit Jupiter中的生命周期回调注解如下:
@BeforeEach
: 还原数据@AfterEach
: 做一些清理工作@BeforeAll
: 在整个测试类开始之前运行@AfterAll
: 在整个测试类完成后运行例如:
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
class MyLifecycleTests {
@BeforeAll
static void initAll() {
System.out.println("initAll()");
}
@BeforeEach
void init() {
System.out.println("init()");
}
@Test
void succeedingTest() {
System.out.println("succeedingTest()");
}
@Test
void failingTest() {
System.out.println("failingTest()");
fail("a failing test");
}
@AfterEach
void tearDown() {
System.out.println("tearDown()");
}
@AfterAll
static void tearDownAll() {
System.out.println("tearDownAll()");
}
}
在此示例中,@BeforeAll
注解指示 initAll()
静态方法在所有测试方法之前执行,@BeforeEach
注解指示 init()
方法在每个测试方法之前运行。
更多内容请参考JUnit JupiterUser Guide。