检查' stderr'在Java程序中为空

时间:2016-10-26 03:37:15

标签: java

有没有办法在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

1 个答案:

答案 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");