JUnit Ant任务不会输出到屏幕

上下文

我正在使用ant1-9-0.jarant-junit-1.9.0.jarant-launcher-1.9.0.jar以编程方式运行JUnit测试。

在我的代码中,我有这个函数返回JUnit Task:

/**
 * Generates a JUnit task which runs every single test in a new JVM
 * @return task The JUnit task
 * @throws Exception
 */
public JUnitTask generateRunTestsTask() throws Exception {
    /* New JUnit task */
    JUnitTask task = new JUnitTask();
    task.init();

    /* Summary settings */
    JUnitTask.SummaryAttribute sa = new JUnitTask.SummaryAttribute();
    sa.setValue("withOutAndErr");
    task.setPrintsummary(sa);

    /* JVM configuration */
    task.setFork(true);
    task.setDir(new File(this.deliveryBinDir));
    task.createJvmarg().setValue("-Duser.dir=" + this.deliveryBinDir);

    /* Output to file */
    FormatterElement.TypeAttribute typeFile = new FormatterElement.TypeAttribute();
    typeFile.setValue("xml");
    FormatterElement formatToFile = new FormatterElement();
    formatToFile.setType(typeFile);
    task.addFormatter(formatToFile);

    /* Task options */
    task.setHaltonfailure(false);
    task.setShowOutput(true);
    task.setOutputToFormatters(true);

    List<String> testSuites = getTestJarList(this.deliveryLibFolder);
    for (String singleSuite : testSuites) {
        JUnitTest test = new JUnitTest(singleSuite);
        /* Sets reports location */
        test.setTodir(this.testReportsFolder);
        task.addTest(test);
    }

    return task;
}

JUnit测试运行时没有问题,输出成功存储到.xml文件中。

问题

我需要将输出结果打印到控制台,因为我希望实时生成结果(不仅在整个过程结束时)。 为此,我在/** Output to file */块之下添加了第二个FormatterElement

/* Output to screen */
FormatterElement.TypeAttribute typeScreen = new FormatterElement.TypeAttribute();
typeScreen.setValue("plain");
FormatterElement formatToScreen = new FormatterElement();
formatToScreen.setType(typeScreen);
formatToScreen.setUseFile(false);
formatToScreen.setOutput(System.out);
task.addFormatter(formatToScreen);

但我的控制台仍然不显示日志。 我也尝试删除formatToFile FormatterElement ,但没有成功。 你有什么建议吗?

笔记:

  • 这些单元测试确实需要分叉,它不能被改变,
  • 只要让我知道你是否需要更多的代码,例如Ant Project或Ant Target的设置,
  • 单元测试的确包含了Sysouts
  • 我已经复制了一个一致的build.xml文件,
  • 如果需要的话,这里是Apache Ant JUnit存储库。

  • Stéphane,junit任务的代码似乎对于处理输出到控制台是正确的。

    我检查了ANT的Main类的源代码,并且需要定义一个构建侦听器才能显示日志。

    这是为了记录目的而定义默认侦听器的工作示例:

    BuildLogger logger = new DefaultLogger();
    logger.setOutputPrintStream(System.out);
    logger.setErrorPrintStream(System.err);
    logger.setMessageOutputLevel(Project.MSG_INFO);
    logger.setEmacsMode(true);
    project.addBuildListener(logger); //add build listener to your define project
    

    Stéphane,缺少单元测试输出可能与JUnitTask.executeAsForked()中的此硬编码子进程流处理程序的存在有关(请参阅ant-junit的源代码):

        Execute execute = new Execute(
            new JUnitLogStreamHandler(
                this,
                Project.MSG_INFO,
                Project.MSG_WARN),
            watchdog);
    

    该方法是私有的,我没有看到明显的“官方”方式来传递另一个流处理程序,所以如果你真的想要以不同的方式处理分叉的JVM输出,你可以利用这个事实,即ant-junit是开源的,创建一个稍微改变的版本,或者为JUnitLogStreamHandler使用更详细的设置,或者甚至使用您自己的ExecuteStreamHandler实现来处理子进程的输出,但是您更喜欢。

    链接地址: http://www.djcxy.com/p/15101.html

    上一篇: JUnit Ant task won't output to screen

    下一篇: why does my view in postgresql not use the index?