2014-01-27 5 views
0

У меня есть класс, который выполняет следующие действияМоя собственная реализация 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) 
} 

Тогда, я могу получить, что список> и прочитать его, чтобы проверить, если я вывод, что я хочу.

Но у меня проблемы с конструктором, используемым для PrintStream. Потому что, в моем случае, я не хочу аргументов для конструктора.

Считаете ли вы, что я использую хороший подход? Должен ли я использовать класс OutputStream вместо PrintStream? Подсказка?

Edit спросить:

Кто-нибудь знает PrintStream, который используется для тестирования?

ответ

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(","); 
     } 
    } 
}