当我以Junit Test身份运行,而不是以Java应用程序身份运行时,Java测试文件有效

时间:2019-05-09 16:42:52

标签: java eclipse testing junit

我有一个用于编写代码的Java类文件和一个用于测试代码的测试文件。

我已经通过Eclipse测试生成器生成了测试用例,并使用@Test编写了代码。当我使用JUnit Test运行这些代码时,一切正常,但是我想导出为jar并执行它。因此,我需要在测试类中有一个主组件。我搜索了google和StackOverflow

public static void main(String[] args) {
        JUnitCore jCore = new JUnitCore();
        jCore.run(StackTest.class);
        System.out.println("In main method");
    }

另一种方法;

public class testRunner {
    public static void main(String[] args) {
        Result result = JUnitCore.runClasses(AllTests.class);
        for (Failure failure : result.getFailures()) {
            System.out.println(failure.toString());
        }
    }
}

public static void main(String args[]) {

 TestRunner.runAndWait(new TestSuite(StackTest.class));

JUnitCore runner = new JUnitCore();
TextListener tl = new TextListener(new RealSystem());
runner.addListener(tl);
runner.run(StackTest.class);
// If above doesn't work, comment everything including imports and uncomment the following
org.junit.runner.JUnitCore.main("StackTest");
   }

像这些解决方案一样,但是对我没有任何帮助。如何使Java应用程序的可执行测试不能作为JUnit运行?因为我想将测试导出到jar中并在外部执行。

我的错误通常如下:

  

JUnit版本4.12 .E时间:0.005发生了1次故障:1)   initializeError(StackTest)java.lang.Exception:没有可运行的   方法   org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)     在   org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128)     在org.junit.runners.ParentRunner.validate(ParentRunner.java:416)处   org.junit.runners.ParentRunner。(ParentRunner.java:84)在   org.junit.runners.BlockJUnit4ClassRunner。(BlockJUnit4ClassRunner.java:65)     在   org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)     在   org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)     在   org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)     在org.junit.runner.Computer.getRunner(Computer.java:40)处   org.junit.runner.Computer $ 1.runnerForClass(Computer.java:31)在   org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)     在   org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)     在   org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)     在org.junit.runners.Suite。(Suite.java:81)   org.junit.runner.Computer.getSuite(Computer.java:28)在   org.junit.runner.Request.classes(Request.java:75)在   org.junit.runner.JUnitCommandLineParseResult.createRequest(JUnitCommandLineParseResult.java:118)     在org.junit.runner.JUnitCore.runMain(JUnitCore.java:77)处   org.junit.runner.JUnitCore.main(JUnitCore.java:36)在   StackTest.main(StackTest.java:144)

     

失败!!!测试运行:1,失败:1

1 个答案:

答案 0 :(得分:2)

您错过了这样一个事实,即您需要一个测试启动器来执行测试,就像您需要一个main方法来执行生产代码一样。仅仅将它们包装在JAR中并没有任何作用。 JUnit 5具有Launcher的概念,请参阅文档。 https://junit.org/junit5/docs/current/user-guide/#launcher-api