我有一个类,它执行以下操作
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?
答案 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(",");
}
}
}