更新时间:2023-09-17 17:12:34
您可以相当轻松地制作自定义的准系统 JUnit 运行程序.下面是一个以 com.package.TestClass#methodName
形式运行单个测试方法的方法:
You can make a custom, barebones JUnit runner fairly easily. Here's one that will run a single test method in the form 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) 除了测试失败时的非零退出代码外不会产生任何结果输出.
After a quick look in the JUnit source I came to the same conclusion as you that JUnit does not support this natively. This has never been a problem for me since IDEs all have custom JUnit integrations that allow you to run the test method under the cursor, among other actions. I have never run JUnit tests from the command line directly; I have always let either the IDE or build tool (Ant, Maven) take care of it. Especially since the default CLI entry point (JUnitCore) doesn't produce any result output other than a non-zero exit code on test failure(s).
注意:对于 JUnit 版本 >= 4.9,您需要 hamcrest 类路径中的库
NOTE: for JUnit version >= 4.9 you need hamcrest library in classpath