有一个测试:
package com.cdek.qa_auto.config;
import com.cdek.qa_auto.utils.CdekJUnitListener;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DynamicTest;
import org.junit.jupiter.api.TestFactory;
import org.junit.platform.launcher.Launcher;
import org.junit.platform.launcher.TestExecutionListener;
import org.junit.platform.launcher.core.LauncherFactory;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.jupiter.api.DynamicTest.dynamicTest;
/***
*
*/
@SpringBootTest
public class JUnit5Test {
public JUnit5Test() throws Exception {}
@BeforeEach
public void beforeEach() throws Exception {
Launcher launcher = LauncherFactory.create();
TestExecutionListener listener = new CdekJUnitListener();
launcher.registerTestExecutionListeners(listener);
}
@TestFactory
public Stream<DynamicTest> test() throws Exception {
List<String> list = new ArrayList<>();
list.add("1");
list.add("12");
list.add("123");
list.add("1234");
list.add("12345");
return list.stream().map(item -> (
dynamicTest("test_" + item, () -> {
if ("1".equalsIgnoreCase(item)) {
System.out.println("fail");
fail("fail");
} else if ("12".equalsIgnoreCase(item)) {
assertTrue(false);
} else if ("123".equalsIgnoreCase(item)) {
throw new Exception("msg");
} else {
assertTrue(true);
}
}
)));
}
}
例如,制作一个屏幕以进行下降的测试。 导入org.junit.platform.launcher.TestExecutionListener的书面实现。
连接,因此通常无法正常工作。不执行完成。
基础:JUnit5-Maven-SpringBoot
每次动态测试后如何执行特定代码?
答案 0 :(得分:0)
如JUnit 5 User Guide中所述:
动态测试的执行生命周期与之完全不同 用于标准@Test案例。具体来说,没有生命周期 各个动态测试的回调。这意味着@BeforeEach 和@AfterEach方法及其对应的扩展回调是 为@TestFactory方法执行,但不为每个动态测试执行。在 换句话说,如果您访问测试实例中的字段 用于动态测试的lambda表达式,这些字段不会被重置 通过回调方法或个人执行之间的扩展 相同的@TestFactory方法生成的动态测试。
因此,您不能使用@AfterEach
方法或“之后”生命周期回调扩展名之一(即AfterEachCallback
或AfterTestExecutionCallback
)。
根据要在“侦听器”中尝试实现的目标,您也许可以在TestExecutionListener
中完成该任务,但是您不能在测试类中进行注册。有关详细信息,请参见《用户指南》中的Plugging in your own Test Execution Listener。