上下文
我正在使用 ant1-9-0.jar
, ant-junit-1.9.0.jar
和 ant-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/