java - JUnit Ant 任务不会输出到屏幕

标签 java ant junit

上下文

我正在使用 ant1-9-0.jar , ant-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 文件中。

问题

我需要将输出打印到控制台,因为我想要实时显示结果(不仅是在整个过程结束时)。为此,我添加了第二个 FormatterElement就在 /** Output to file */ block 的下面:

/* 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,但没有成功。你有什么建议吗?

注意事项:

  • 这些单元测试确实需要 fork ,不能更改,
  • 如果您需要更多代码,请告诉我,例如 Ant Project 的设置或 Ant Target ,
  • 单元测试确实包含Sysouts,
  • 我已经复制了一个一致的 build.xml 文件,它可以工作,
  • here如果需要,是 Apache Ant JUnit 存储库。

最佳答案

Stéphane,您的 junit 任务代码似乎可以正确处理控制台输出。

我已经检查了 ANT 主类的源代码,您需要定义一个构建监听器才能显示日志。

这是为日志目的定义默认监听器的工作示例:

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

关于java - JUnit Ant 任务不会输出到屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130835/

相关文章:

java - Ant build.xml 文件无法使用 fileset 元素中的属性

java - JUnit java.lang.NoSuchMethodError : junit. framework.ComparisonFailure.getExpected()Ljava/lang/String

java - 测量多线程 Java 应用程序的执行时间

java - 是否可以确定特定文件夹的内容已更改,并在发生更改时按需运行 ANT 任务?

java - JFrame 中的 KeyEvent 由于可运行而无法工作

java - 使用 Ant 从 WSDL 生成客户端 jar 时出现问题

java - java中如何从父类(super class)或后代类调用检查junit方法?

junit - 使用 mock 对 Play Controller 进行单元测试

java - 从 PHP 中强制终止失控的 java exec

java.lang.NoClassDefFoundError : org/apache/avalon/framework/configuration/ConfigurationException