[英]How to run parametrized tests with JUnitCore in JUnit 5?
我正在嘗試使用JUnitCore
以編程方式運行一些參數化單元測試。 我的代碼在測試未參數化時有效,但在參數化時失敗。 一個最小的例子:
Main.java
:
public class Main {
public static void main(final String args[]) {
final Request request = Request.classes(TheTest.class);
final JUnitCore core = new JUnitCore();
final Result result = core.run(request);
System.out.println("A total of " + result.getRunCount() + " tests were executed.");
System.out.println("A total of " + result.getFailureCount() + " failed.");
for (Failure f : result.getFailures()) {
System.err.println(f.getMessage());
System.err.println(f.getTrace());
}
}
}
TheTest.java
public class TheTest {
@ParameterizedTest
@ValueSource(strings = {"A", "B"})
public void readFile_1(final String s) {
System.out.println(s);
}
}
Output:
A total of 1 tests were executed.
A total of 1 failed.
Invalid test class 'TheTest':
1. No runnable methods
org.junit.runners.model.InvalidTestClassError: Invalid test class 'TheTest':
1. No runnable methods
at org.junit.runners.ParentRunner.validate(ParentRunner.java:525)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:102)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.JUnit4.<init>(JUnit4.java:23)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
at org.junit.runner.Computer.getRunner(Computer.java:50)
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:70)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:125)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:111)
at org.junit.runners.Suite.<init>(Suite.java:81)
at org.junit.runner.Computer$2.<init>(Computer.java:33)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:77)
at org.junit.runner.Request.classes(Request.java:92)
at Main.main(Main.java:8)
Process finished with exit code 0
如您所見,JUnit 不將該方法識別為單元測試。 如果我在@ParametrizedTest
之上添加@Test
,那么 JUnit 會抱怨測試有參數 - 所以它顯然不明白這是一個參數化測試。
我怎樣才能做到這一點? 謝謝!
問題是我用來調用測試的方案僅適用於 JUnit 4。
這適用於 JUnit 5:
public class Main {
public static void main(final String args[]) {
final LauncherDiscoveryRequest launcherDiscoveryRequest = LauncherDiscoveryRequestBuilder.request()
.selectors(selectClass(TheTest.class))
.build();
final Launcher launcher = LauncherFactory.create();
TestPlan testPlan = launcher.discover(launcherDiscoveryRequest);
SummaryGeneratingListener listener = new SummaryGeneratingListener();
launcher.registerTestExecutionListeners(listener);
launcher.execute(launcherDiscoveryRequest);
TestExecutionSummary summary = listener.getSummary();
summary.printTo(new PrintWriter(System.out));
}
}
https 中的更多信息://www.baeldung.com/junit-tests-run-programmatically-from-java
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.