Junit 5(二)

发布于 更新于
本文目录
  1. 1、 生命周期方法
  2. 2、显示名称
  3. 3、断言
  4. 3.1、第三方断言库

技术文章接口测试

测试方法:任何用@Test、@RepeatedTest、@ParameterizedTest、@TestFactory 标记的方法。

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 团队建议使用第三方断言库,例如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

继续阅读