繁体   English   中英

如何在 JUnit 5 中使用 JUnitCore 运行参数化测试?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM