为了账号安全,请及时绑定邮箱和手机立即绑定

使用命令行从JUnit类运行单个测试

使用命令行从JUnit类运行单个测试

泛舟湖上清波郎朗 2019-12-20 10:01:48
我试图找到一种方法,使我可以仅使用命令行和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。所以我想知道是否有任何方法可以做到这一点?我要寻找的要点:能够从JUnit测试类运行单个测试命令行(使用JUnit)避免修改测试源避免使用其他工具
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

您可以非常轻松地创建自定义的准系统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)不会在测试失败时产生非零退出代码以外的任何结果输出。


注意:对于> = 4.9的JUnit版本,您需要在类路径中包含hamcrest库


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 495 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信