有没有办法在Java程序中检查是否有东西被打印到stderr
直到那一点?作为一个虚拟的例子,
if (something == somethingElse)
{
System.err.println("This is a message");
}
// Here, I want to check if stderr is empty, or if something was printed to it
答案 0 :(得分:2)
当然,这是可能的(尽管只建议作为测试设置的一部分,而不是作为应用程序本身的一部分)。
您可以将System.err
重定向到另一个PrintStream
。如果PrintStream
捕获缓冲区中的输出,那么您可以稍后检查该缓冲区。
如果您还希望在@ElliotFrisch建议的原始错误流上看到输出,那么您需要做更多工作:您需要创建一个自定义PrintStream子类,将输出定向到原始System.err以及到你的缓冲区。
但是如果这只是为了捕获单元测试的输出,你可能不需要它 - 你可能想断言输出包含了什么。
// Set up alternate System.err PrintStream that prints to a buffer
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
PrintStream p = new PrintStream(bytes, true, "UTF-8");
System.setErr(p);
if (something == somethingElse) {
System.err.println("This is a message");
}
// Here, I want to check if stderr is empty, or if something was printed
// to it
// Capture what was printed so far
String printedSoFar = bytes.toString("UTF-8");