我有一个用于编写代码的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
答案 0 :(得分:2)
您错过了这样一个事实,即您需要一个测试启动器来执行测试,就像您需要一个main
方法来执行生产代码一样。仅仅将它们包装在JAR中并没有任何作用。
JUnit 5具有Launcher
的概念,请参阅文档。
https://junit.org/junit5/docs/current/user-guide/#launcher-api