我自己实现的PrintStream测试

时间:2014-01-27 12:43:49

标签: java testing printstream

我有一个类,它执行以下操作

class PersonDumper {

    // attributes

    public PersonDumper(PrintStream output, Set<Person> persons) {
        // do stuff
    }

    public dump() {
        for(Person p : persons) {
            output.print(p);
            output.print(",");
        }
    }
}

问题是我想测试我给Person对象的格式(在我想打印toString()方法的例子中),依此类推。

然后我想用这样的东西来测试输出:

public class ListPrintStream extends PrintStream {
    private List<List<String>> output;
    // every time I call to print I do output.add(string)
}

然后,我可以得到那个List&gt;并阅读它以测试我是否输出我想要的东西。

但是我遇到了用于PrintStream的构造函数的问题。因为,就我而言,我不想要任何构造函数的参数。

你认为我使用的方法很好吗? 我应该使用OutputStream类而不是PrintStream吗? 任何提示?

编辑问:

有没有人知道用于测试的PrintStream?

1 个答案:

答案 0 :(得分:1)

您可以将虚拟输出流传递给超类构造函数,例如NullOutputStream from Apache commons-io,它是一个OutputStream实现,可以静默地丢弃写入它的所有数据。

或者,您可以考虑声明PersonDumper取代Appendable的实例。 PrintStream实现了Appendable,因此在正常情况下这不会改变您的代码,但是对于测试,您可以传入StringBuilder或类似代码。

class PersonDumper {

    // attributes

    public PersonDumper(Appendable output, Set<Person> persons) {
        // do stuff
    }

    public dump() {
        for(Person p : persons) {
            // String.valueOf rather than .toString to be null-safe
            output.append(String.valueOf(p));
            output.append(",");
        }
    }
}