Junit:如何使用命令行从项目中 运行 进行测试
Junit: How to run tests from project using command line
这是项目中类的构建结构
(root project)
|__ build
|__ classes
|__ main/org/loklak/harvester
|__ abc.class
|__ test/org/loklak/harvester
|__ abc_test.class
|__ def_test.class
我使用 gradle 和 junit 4.12 构建了项目,并且构建正确
我已经检查 abc_test.class 存在于上述位置,
但是当我 运行 ->
java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.junit.runner.JUnitCore org.loklak.harvester.abc_test
我收到错误 ->
JUnit version 4.12
.E
Time: 0.004
There was 1 failure:
1) initializationError(org.junit.runner.JUnitCommandLineParseResult)
java.lang.IllegalArgumentException: Could not find class [org.loklak.harvester.abc_test]
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:102)
at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50)
at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.ClassNotFoundException: org.loklak.harvester.abc_test
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.junit.internal.Classes.getClass(Classes.java:16)
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100)
... 4 more
FAILURES!!!
Tests run: 1, Failures: 1
这个命令工作正常的地方 ->
java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.loklak.harvester.abc
abc_test.java
package org.loklak.harvester;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.loklak.harvester.abc;
public class abc_test {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(def_test.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
我无法找出错误,我在 java 命令行命令中缺少什么?
你的命名真让人费解。 Class 名称在 java 中变为大写;你不要在其中使用 _ 。并注意:您在代码中谈论 abc_test
;但异常显示 test_harvester
- 一个在您输入的其他任何地方都没有显示的名称!
除此之外,我猜测这里的答案是:当运行ning JUnit时,类路径中需要三个部分:
- JUnit 本身
- 你的作品类
- 你的测试类
我猜:你的 test 类 not 在你给 java 的那个 JAR 中为您的 JUnit 运行。可能是因为 gradle 默认情况下不会将测试 类 添加到您的 JAR 中(这是有道理的:为什么要将单元测试 类 发送给您的客户?!)
这是项目中类的构建结构
(root project)
|__ build
|__ classes
|__ main/org/loklak/harvester
|__ abc.class
|__ test/org/loklak/harvester
|__ abc_test.class
|__ def_test.class
我使用 gradle 和 junit 4.12 构建了项目,并且构建正确
我已经检查 abc_test.class 存在于上述位置,
但是当我 运行 ->
java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.junit.runner.JUnitCore org.loklak.harvester.abc_test
我收到错误 ->
JUnit version 4.12
.E
Time: 0.004
There was 1 failure:
1) initializationError(org.junit.runner.JUnitCommandLineParseResult)
java.lang.IllegalArgumentException: Could not find class [org.loklak.harvester.abc_test]
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:102)
at org.junit.runner.JUnitCommandLineParseResult.parseArgs(JUnitCommandLineParseResult.java:50)
at org.junit.runner.JUnitCommandLineParseResult.parse(JUnitCommandLineParseResult.java:44)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
at org.junit.runner.JUnitCore.main(JUnitCore.java:36)
Caused by: java.lang.ClassNotFoundException: org.loklak.harvester.abc_test
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.junit.internal.Classes.getClass(Classes.java:16)
at org.junit.runner.JUnitCommandLineParseResult.parseParameters(JUnitCommandLineParseResult.java:100)
... 4 more
FAILURES!!!
Tests run: 1, Failures: 1
这个命令工作正常的地方 ->
java -Xmx1024m -classpath build/libs/loklak_server-all.jar org.loklak.harvester.abc
abc_test.java
package org.loklak.harvester;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import org.loklak.harvester.abc;
public class abc_test {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(def_test.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
我无法找出错误,我在 java 命令行命令中缺少什么?
你的命名真让人费解。 Class 名称在 java 中变为大写;你不要在其中使用 _ 。并注意:您在代码中谈论 abc_test
;但异常显示 test_harvester
- 一个在您输入的其他任何地方都没有显示的名称!
除此之外,我猜测这里的答案是:当运行ning JUnit时,类路径中需要三个部分:
- JUnit 本身
- 你的作品类
- 你的测试类
我猜:你的 test 类 not 在你给 java 的那个 JAR 中为您的 JUnit 运行。可能是因为 gradle 默认情况下不会将测试 类 添加到您的 JAR 中(这是有道理的:为什么要将单元测试 类 发送给您的客户?!)