0

我有一门课,它执行以下操作

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> 并阅读它以测试我是否输出了我想要的内容。

但我对用于 PrintStream 的构造函数有疑问。因为,就我而言,我不希望构造函数有任何参数。

你认为我使用了一个好的方法吗?我应该使用 OutputStream 类而不是 PrintStream 吗?有什么提示吗?

编辑询问:

有谁知道用于测试的 PrintStream?

4

1 回答 1

1

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

或者,您可以考虑声明您PersonDumper的实例来Appendable代替。 PrintStream实现Appendable所以这在正常情况下不会改变你的代码,但为了测试你可以传入 aStringBuilder或类似的代替。

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(",");
        }
    }
}
于 2014-01-27T13:04:36.233 回答