我在我的应用程序上运行了一些JUnit测试。每个测试都有一个for循环调用相应的方法10000次。 测试的方法产生大量的日志。 这些日志也由JUnit自动收集为测试输出。 这种情况会导致OutOfMemoryError,因为JUnit保持输出的字符串缓冲区变得太大。 我不需要在测试期间使用这些日志,所以如果有办法告诉JUnit“不保留程序输出”就足够了。 有什么想法吗?
答案 0 :(得分:3)
您使用的是哪种类型的日志记录?有没有办法可以覆盖默认的日志记录行为,只是忽略所有日志消息?
答案 1 :(得分:1)
一些选项:
-Xmx <some number>M
增加最大堆大小,例如-Xmx 256M
。答案 2 :(得分:0)
我只会增加可用内存。尝试将-Xmx256m -Xmx256m添加到您的VM。
答案 3 :(得分:0)
解决方案是覆盖日志记录属性。现在我禁用了日志记录,似乎一切正常(测试仍在运行)。如果它工作,我将配置一种记录到文件的方法。 谢谢大家(并祝贺杰夫和朋友加入这个网站)。
答案 4 :(得分:0)
我看到已经接受了一个答案,但是如果我把它打印出来并且测试得更快,那么这就是我提交的内容:
如果通过“logging”表示System.out.println()或System.err.println(),并且如果您确定您的测试确实不需要日志,那么您可以重定向stdout和stderr编程。
// Save the original stdout and stderr
PrintStream psOut = System.out;
PrintStream psErr = System.err;
PrintStream psDevNull = null;
try
{
// Send stdout and stderr to /dev/null
psDevNull = new PrintStream(new ByteArrayOutputStream());
System.setOut(psDevNull);
System.setErr(psDevNull);
// run tests in loop
for (...)
{
}
}
finally
{
// Restore stdout and stderr
System.setOut(psOut);
System.setErr(psErr);
if (psDevNull != null)
{
psDevNull.close();
psDevNull = null;
}
}
这样,您的测试输出将被禁用,但JUnit的其他输出将不会,就像您在命令行上使用重定向一样:
ant test &> /dev/null
命令行重定向导致所有Ant / JUnit的输出被重定向,而不仅仅是来自您正在测试的类的内容,因此可能不是您想要的。程序化重定向只会导致程序中对System.out和System.err的打印/写入被重定向,您仍然可以从Ant和JUnit获取输出。
答案 5 :(得分:0)
如果有任何帮助,设置outputtoformatters =“no”解决了我所有的内存问题(在Ant 1.7.1中,这可以防止测试生成的输出被发送到测试格式化程序)。