1、 生命周期方法
测试方法:任何用@Test
、@RepeatedTest
、@ParameterizedTest
、@TestFactory
标记的方法。
生命周期方法:@BeforeAll
、@AfterAll
、@BeforeEach
、 @AfterEach
。
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
class StandardTests {
@BeforeAll
static void initAll() {
System.out.println("@BeforeAll.......");
}
@BeforeEach
void init() {
System.out.println("@BeforeEach..........");
}
@Test
void succeedingTest() {
System.out.println("succeedingTest..........");
}
@Test
void failingTest() {
fail("a failing test");
}
@AfterEach
void tearDown() {
System.out.println("@AfterEach.........");
}
@AfterAll
static void tearDownAll() {
System.out.println("@AfterAll.........");
}
}
输出结果:
输出:
@BeforeAll.......
@BeforeEach..........
succeedingTest..........
@AfterEach.........
@BeforeEach..........
org.opentest4j.AssertionFailedError: a failing test
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:39)
at org.junit.jupiter.api.Assertions.fail(Assertions.java:117)
@AfterEach.........
@AfterAll.........
2、显示名称
测试类和测试方法可以使用@DisplayName
设置名称,这些名称将显示在测试报告中以及测试运行程序和 IDE 中。
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@DisplayName("A special test case")
class DisplayNameDemo {
@Test
@DisplayName("Custom test name containing spaces")
void testWithDisplayNameContainingSpaces() {
}
@Test
@DisplayName("╯°□°)╯")
void testWithDisplayNameContainingSpecialCharacters() {
}
@Test
@DisplayName("?")
void testWithDisplayNameContainingEmoji() {
}
}
IDEA插件显示:
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@DisplayName("A special test case")
class DisplayNameDemo {
@Test
@DisplayName("Custom test name containing spaces")
void testWithDisplayNameContainingSpaces() {
}
@Test
@DisplayName("╯°□°)╯")
void testWithDisplayNameContainingSpecialCharacters() {
}
@Test
@DisplayName("?")
void testWithDisplayNameContainingEmoji() {
}
}
3、断言
Junit 5 附带了 JUnit 4 拥有的许多断言方法,并添加了一些非常适合与 Java 8 lambda 一起使用的断言方法。所有 JUnit Jupiter 断言都是类中的static
方法org.junit.jupiter.api.Assertions
。
import static java.time.Duration.ofMillis;
import static java.time.Duration.ofMinutes;
import java.util.concurrent.CountDownLatch;
import example.domain.Person;
import example.util.Calculator;
import org.junit.jupiter.api.Test;
class AssertionsDemo {
private final Calculator calculator = new Calculator();
private final Person person = new Person("Jane", "Doe");
@Test
void standardAssertions() {
assertEquals(2, calculator.add(1, 1));
assertEquals(4, calculator.multiply(2, 2),
"The optional failure message is now the last parameter");
assertTrue('a' < 'b', () -> "Assertion messages can be lazily evaluated -- "
+ "to avoid constructing complex messages unnecessarily.");
}
@Test
void exceptionTesting() {
Exception exception = assertThrows(ArithmeticException.class, () ->
calculator.divide(1, 0));
assertEquals("/ by zero", exception.getMessage());
}
@Test
void timeoutExceeded() {
assertTimeout(ofMillis(10), () -> {
Thread.sleep(100);
});
}
}
3.1、第三方断言库
尽管 JUnit 5 提供的断言工具足以满足许多测试场景,但有时需要或需要更多功能和附加功能(例如 匹配器)。在这种情况下,JUnit 团队建议使用第三方断言库,例如AssertJ
、Hamcrest
、Truth
等。因此开发人员可以自由使用他们选择的断言库。
以下示例演示了使用 Hamcrest 库的断言方法,只要将 Hamcrest 库添加到类路径中,就可以静态导入assertThat()
、is()
、 等方法equalTo()
,然后在测试中使用它们,如assertWithHamcrestMatcher()
下面的方法所示。
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import example.util.Calculator;
import org.junit.jupiter.api.Test;
class HamcrestAssertionsDemo {
private final Calculator calculator = new Calculator();
@Test
void assertWithHamcrestMatcher() {
assertThat(calculator.subtract(4, 1), is(equalTo(3)));
}
}
欢迎来到testingpai.com!
注册 关于