我在我的应用程序上运行了一些JUnit测试。每个测试都有一个for循环调用相应的方法10000次。 测试的方法产生大量的日志。 这些日志也由JUnit自动收集为测试输出。 这种情况会导致OutOfMemoryError,因为JUnit保持输出的字符串缓冲区变得太大。 我不需要在测试期间使用这些日志,所以如果有办法告诉JUnit <!>“不要保持程序输出<!>”;这就足够了。 有什么想法吗?

有帮助吗?

解决方案

您使用的是哪种类型的日志记录?有没有办法可以覆盖默认的日志记录行为,只是忽略所有日志消息?

其他提示

一些选项:

  1. 更改日志记录,以便将其转储到文件而不是标准输出。
  2. 使用-Xmx <some number>M增加最大堆大小,例如-Xmx 256M

我只会增加可用内存。尝试将-Xmx256m -Xmx256m添加到您的VM。

解决方案是覆盖日志记录属性。现在我禁用了日志记录,似乎一切正常(测试仍在运行)。如果它工作,我将配置一种记录到文件的方法。 谢谢大家(并祝贺Jeff <!> amp;朋友加入本网站。)

我看到已经接受了一个答案,但是如果我把它打印出来并且测试得更快,那么我就会提交这些答案:

如果通过<!>“;记录<!>”;你的意思是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获取输出。

如果有任何帮助,请设置outputtoformatters = <!>“; no <!>”;解决了我所有的内存问题(在Ant 1.7.1中,这可以防止测试发送到测试格式化程序生成的输出)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top