如何预先设置瞬间刷新的流

时间:2013-05-31 09:39:07

标签: java unit-testing netbeans stream system.out

我正在Netbeans IDE编写一个单元测试包。现在我将执行语句流打印到System.out,同时将错误语句打印到System.error。现在,由于它们是两个不同的流,因此它们无序打印。我的意思是他们不打印同步。我知道flush方法会立即打印语句,但是在每个这样的语句之后写这个语句都很乏味。如何配置事先要立即刷新的流。可能是单元测试的开始?。

我想要这个,因为我想利用两种不同的颜色,Netbeans显示两个输出流。

此外,我的方法中的任何错误点和我们非常欢迎改善建议。

3 个答案:

答案 0 :(得分:2)

可能还有另一种可能性,所以试一试:

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;

public class SystemOut {
    public static void main(String[] args) {
        System.out.println("Hi");

        final OutputStream newOs = new OutputStream() {
            FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

            @Override
            public void write(int b) throws IOException {
                this.fdOut.write(b);
            }
        };

        System.setOut(new PrintStream(newOs));
        System.out.println("Hi, again");
    }
}

我们的想法是用无缓冲的输出流替换现有的缓冲输出流。

答案 1 :(得分:2)

您不应该自己打印执行流程。有很多理由不这样做:

  • 您不应该打印成功测试的状态。有一个非常 有限的理由这样做。你真正想要的是什么 你的测试是找到错误,而不是做得好的情况。专注于你的 问题。
  • 用于单元测试的所有现代框架,例如 jUnit TestNG , 为您提供内置的测试结果输出机制。只是花钱 一段时间学习它们,你的测试将提供更多信息。
  • 冗余日志记录会减慢您的测试速度,因为它们非常重要 应该经常发布。
  • 如果您使用Fail fast练习,您将只对一个练习感兴趣 一次失败的消息。这是一个很好的方法,可以让你专注 更有效。

简而言之,您不会阅读成功日志,因为它们没用。对于失败的测试,您可以使用消息传递标准断言。

答案 2 :(得分:1)

您可以将println()flush()换成另一种方法:

void out(String s) {
  System.out.println(s);
  System.out.flush();
}

无论如何,看看我编写测试的方式:只有 info 消息。 错误消息由失败的断言隐式写入。