嗨,我得到了一个抽象的 BaseTest 和第二个这个 BaseTest 的 2 属性实作
我想在属性类上呼叫所有@Test。
一些代码:
public abstract class BaseTest<T> {
public abstract T getInstance();
@BeforeEach
public void setup(){
this.instance = getInstance();
}
@Test
all test methods ....
我想用这个 BaseTest 的 2 个实作创建第二个类,比如
class TwoImplOfBaseTest {
private BaseTest<Integer> testA;
private BaseTest<String> testB;
@Test
public void testAll(){
//write something like testA.doAllTest();
//write something like testB.doAllTest();
}
谢谢阅读
uj5u.com热心网友回复:
我认为你把它复杂化了。如果我理解正确,由于 A 和 B 之间的常见测验用例,您有 BaseTest 类。@Test 和几乎所有其他 junit 注释都是从超类继承的,除非该方法被覆写。在这种情况下,您只需要创建 BaseTest 的具体实作。JUnit 将初始化测验类实体,运行所有 @Test 方法等。
public class TestA extends BaseTest<Integer> {
//init stuff if needed
}
和其他类
public class TestB extends BaseTest<String> {
//init stuff if needed
}
就是这样,junit runner 将从 BaseTest 为 TestA 然后为 TestB 运行所有 @Test 方法。
uj5u.com热心网友回复:
如果您的目标是运行@Test
抽象类中的所有方法以及所有扩展类,那么这已经发生了。您可以通过任何 IDE(Intellij/Eclipse)对此进行测验
但是,如果目标是以编程方式选择 N 个类,并直接从 Java 运行它们的方法,那么您可以按如下所述进行:
在我看来,最好遵循其他答案,因为这允许报告插件直观地向您显示通过/失败的内容和统计信息。
这取决于您要实作的目标:
public class RunJUnit5TestsFromJava {
SummaryGeneratingListener listener = new SummaryGeneratingListener();
public void runASingleClass() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass(FirstUnitTest.class))
.build();
Launcher launcher = LauncherFactory.create();
TestPlan testPlan = launcher.discover(request);
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
}
public void runAllClassesUnderPackage() {
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
.selectors(selectPackage("com.package.where.your.test.classes.are"))
.filters(includeClassNamePatterns(".*Test"))
.build();
Launcher launcher = LauncherFactory.create();
TestPlan testPlan = launcher.discover(request);
launcher.registerTestExecutionListeners(listener);
launcher.execute(request);
}
}
RunJUnit5TestsFromJava runner = new RunJUnit5TestsFromJava();
runner.runAll();
TestExecutionSummary summary = runner.listener.getSummary();
summary.printTo(new PrintWriter(System.out));
参考:https : //www.baeldung.com/junit-tests-run-programmatically-from-java
0 评论