Junit 5(二)

本贴最后更新于 297 天前,其中的信息可能已经事过境迁

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 插件显示:

QQ 截图 20210723161922.png

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 团队建议使用第三方断言库,例如 AssertJHamcrestTruth 等。因此开发人员可以自由使用他们选择的断言库。

以下示例演示了使用 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)));
    }

}
1 操作
luojie 在 2021-07-29 15:53:48 更新了该帖
回帖
请输入回帖内容 ...