从命令行生成JUnit报告

从命令行生成JUnit报告,junit,continuous-integration,junit4,Junit,Continuous Integration,Junit4,我有一个云系统的测试设置,它混合使用python进行流程级控制和junit进行内部状态检查。本质上,我将几个VM作为云带到服务器,然后是一个junit VM,它是云的成员,但驱动测试和检查内部状态。我们现有的云管理工具是由python驱动的,我希望保持这一点 我有一个运行JUnit命令行的工作设置,通过 java -ea -cp <classpath> org.junit.runner.JUnitCore <tests> java-ea-cp org.junit.run

我有一个云系统的测试设置,它混合使用python进行流程级控制和junit进行内部状态检查。本质上,我将几个VM作为云带到服务器,然后是一个junit VM,它是云的成员,但驱动测试和检查内部状态。我们现有的云管理工具是由python驱动的,我希望保持这一点

我有一个运行JUnit命令行的工作设置,通过

java -ea -cp <classpath> org.junit.runner.JUnitCore <tests>
java-ea-cp org.junit.runner.JUnitCore
但这不会生成报告文件。我知道ant能够生成xml报告,但我不想让ant参与这个过程(我已经有足够多的活动部件了)

有没有办法从命令行启动junit以生成报告

理想情况下,我会让junit测试生成xml报告,python测试生成xml报告,然后将它们合并在一起供我们的CI系统使用


更新:命令行执行必须支持Windows、Linux和Mac。我们不允许发布外部ant,尽管打包内部ant可能是一种选择。

JUnit库没有任何XML输出选项。要实现这一点,您需要编写自己的,它侦听输出,并在您的情况下编写XML文件

但是,要以正确的格式获取XML文件,以便CI系统可以读取它,我认为只使用ant要容易得多,可以通过命令行使用build.XML(),也可以使用java api:

编辑:最初,我们有四个选择:

  • 从命令行使用ant
  • 以编程方式使用ant(使用JavaAPI)
  • 直接将XMLJUnitResultFormatter与JUnitCore一起使用
  • 创建一个自定义RunListener,它生成正确的XML输出
  • 考虑到OP增加的限制,我们不能从命令行使用ant,这消除了1

    在更仔细地研究了Ant JUnit任务之后,似乎不可能将其与JUnitCore(添加TestListener)一起使用,因为Ant直接使用测试类的名称,所以您不能使用桥接类。从

    这消除了3

    通过JavaAPI以编程方式调用Ant。我找不到这方面的任何最新文档。这似乎很难


    因此,最后,我将使用XMLJUnitResultFormatter中的代码作为基础,执行4,一个自定义RunListener。然后,我会把它发布在github.com上,这样这个问题就可以得到正确的回答:-)

    对不起,我似乎无法让换行符出现。。。如果我理解正确,你是在建议我:1)包括ant-jar 2)编写一个自定义的main 3)将ant-jar的RunListener添加到JUnitCore实例4)让它rip?或者是否有一个较短版本的表单1)包括ant jar 2)更直接地调用它,它将处理JUnitCore部分?ant调用junit,它运行测试。因此,您需要为它提供build.xml,并调用ant。最简单的方法是确保ant安装在系统的某个地方,然后从命令行执行。而不是java。。。你会有ant…唉,需要安装ant是我不能做的事情之一。这条消息是从高处传下来的。谢谢,我担心答案会是这样,但肯定很有帮助。我在的一个下载中发现了这样一个RunListener。为了便于参考,我将所需的类提取到。Windows还是Unix(就命令行而言)?
    private void formatError(String type, Test test, Throwable t) {
        ...
        nested.setAttribute(ATTR_TYPE, t.getClass().getName());
    
        String strace = JUnitTestRunner.getFilteredTrace(t);
        Text trace = doc.createTextNode(strace);
        nested.appendChild(trace);
    }