我试图找到一种方法,允许我仅使用命令行和java从JUnit类运行单个测试。
我可以使用以下方法从类中运行整个测试集:
java -cp .... org.junit.runner.JUnitCore org.package.classname
我真正想做的是这样的事情:
java -cp .... org.junit.runner.JUnitCore org.package.classname.method
或:
java -cp .... org.junit.runner.JUnitCore org.package.classname#method
我注意到可能有办法使用JUnit注释来做到这一点,但我宁愿不手动修改测试类的源代码(尝试自动化)。我也看到Maven可能有办法做到这一点,但如果可能的话我想避免依赖Maven。
所以我想知道是否有办法做到这一点?
我正在寻找的关键点:
答案 0 :(得分:72)
您可以非常轻松地制作自定义的准系统JUnit跑步者。这是一个将以com.package.TestClass#methodName
:
import org.junit.runner.JUnitCore;
import org.junit.runner.Request;
import org.junit.runner.Result;
public class SingleJUnitTestRunner {
public static void main(String... args) throws ClassNotFoundException {
String[] classAndMethod = args[0].split("#");
Request request = Request.method(Class.forName(classAndMethod[0]),
classAndMethod[1]);
Result result = new JUnitCore().run(request);
System.exit(result.wasSuccessful() ? 0 : 1);
}
}
您可以这样调用它:
> java -cp path/to/testclasses:path/to/junit-4.8.2.jar SingleJUnitTestRunner
com.mycompany.product.MyTest#testB
在快速浏览一下JUnit源代码后,我得出了与JUnit本身不支持这个结论相同的结论。这对我来说从来都不是问题,因为IDE都有自定义JUnit集成,允许您在游标下运行测试方法,以及其他操作。我从未直接从命令行运行JUnit测试;我总是让IDE或构建工具(Ant,Maven)来处理它。特别是因为默认的CLI入口点(JUnitCore)在测试失败时不会产生除非零退出代码之外的任何结果输出。
注意: 对于JUnit版本> = 4.9,您需要在类路径中使用hamcrest库
答案 1 :(得分:39)
我使用Maven构建我的项目,并使用SureFire maven插件来运行junit测试。 如果您有此设置,则可以执行以下操作:
mvn -Dtest=GreatTestClass#testMethod test
在这个例子中,我们只是在Class“GreatTestClass”中运行一个名为“testMethod”的测试方法。
有关详细信息,请查看http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html
答案 2 :(得分:1)
以下命令工作正常。
mvn -Dtest=SqsConsumerTest -DfailIfNoTests=false test
答案 3 :(得分:-1)
我们使用了IntelliJ,并花了很多时间试图解决它。
基本上,它涉及两个步骤:
% javac -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" SetTest.java
% java -cp .:"/Applications/IntelliJ IDEA 13 CE.app/Contents/lib/*" org.junit.runner.JUnitCore SetTest