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 に使用されるコンストラクターに問題があります。私の場合、コンストラクターに引数が必要ないからです。

私は良いアプローチをしていると思いますか?PrintStream の代わりに OutputStream クラスを使用しますか? ヒントはありますか?

編集して尋ねる:

テストに使用される PrintStream を知っている人はいますか?

4

1 に答える 1

1

Apache commons-io の NullOutputStreamなどのダミーの出力ストリームをスーパークラス コンストラクターに渡すことができます。これは、書き込まれたすべてのデータをサイレントに破棄する OutputStream 実装です。

PersonDumperまたは、代わりにのインスタンスを取るように宣言することを検討することもできますAppendablePrintStreamを実装Appendableしているため、通常はコードが変更されませんが、テストの場合はStringBuilder代わりに a または類似のものを渡すことができます。

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 に答える