测试接口和默认方法
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.equals或Comparable.compareTo的实现应该如何如下表现。
在你的测试类中,你可以实现两个契约接口,从而继承相应的测试。当然你必须实现抽象方法。
上述测试仅仅是作为例子,因此不完整。
Last updated