测试接口和默认方法

JUnit Jupiter允许在接口default方法中声明@Test@RepeatedTest@ParameterizedTest@ TestFactory@TestTemplate@BeforeEach@AfterEach。如果测试接口或测试类用@TestInstance(Lifecycle.PER_CLASS)注解(请参阅测试实例生命周期),则可以在测试接口中的static方法或接口default方法上声明@BeforeAll@AfterAll。这里有些例子。

@TestInstance(Lifecycle.PER_CLASS)
interface TestLifecycleLogger {

    static final Logger LOG = Logger.getLogger(TestLifecycleLogger.class.getName());

    @BeforeAll
    default void beforeAllTests() {
        LOG.info("Before all tests");
    }

    @AfterAll
    default void afterAllTests() {
        LOG.info("After all tests");
    }

    @BeforeEach
    default void beforeEachTest(TestInfo testInfo) {
        LOG.info(() -> String.format("About to execute [%s]",
            testInfo.getDisplayName()));
    }

    @AfterEach
    default void afterEachTest(TestInfo testInfo) {
        LOG.info(() -> String.format("Finished executing [%s]",
            testInfo.getDisplayName()));
    }

}

可以在测试接口上声明@ExtendWith@Tag,以便实现该接口的类自动继承其注解和扩展。请参阅测试执行前后的回调来获取TimingExtension的源代码。

在你的测试类中,你可以实现这些测试接口来应用它们。

运行TestInterfaceDemo,输出类似以下内容:

这个特性的另一个可以应用的地方是为接口契约编写测试。例如,您可以编写测试,验证Object.equalsComparable.compareTo的实现应该如何如下表现。

在你的测试类中,你可以实现两个契约接口,从而继承相应的测试。当然你必须实现抽象方法。

上述测试仅仅是作为例子,因此不完整。

Last updated