2008-10-22 9 views
21

Я собираюсь написать тесты junit для Java-класса синтаксического разбора XML, который выводится непосредственно в OutputStream. Например, xmlWriter.writeString("foo"); произведет что-то вроде <aTag>foo</aTag>, которое будет записано в выходной поток, находящийся внутри экземпляра XmlWriter. Вопрос в том, как проверить это поведение. Разумеется, одним из решений было бы позволить OutputStream быть FileOutputStream, а затем читать результаты, открывая записанный файл, но он не очень изящный.Тестирование того, что написано на Java OutputStream

ответ

23

Используйте ByteArrayOutputStream, а затем получите данные из этого, используя toByteArray(). Это не будет проверять , как записывает в поток (по одному байту за раз или в виде большого буфера), но, как правило, вам все равно это не нужно.

3

Если вы можете передать Writer XmlWriter, я передам ему StringWriter. Вы можете запросить содержимое StringWriter, используя toString().

Если вам нужно пройти OutputStream, вы можете передать ByteArrayOutputStream, а также можете позвонить по телефону toString(), чтобы получить его содержимое в виде строки.

Тогда вы можете написать что-то вроде:

public void testSomething() 
{ 
    Writer sw = new StringWriter(); 
    XmlWriter xw = new XmlWriter(sw); 
    ... 
    xw.writeString("foo"); 
    ... 
    assertEquals("...<aTag>foo</aTag>...", sw.toString()); 
} 
2

Это просто. Как @JonSkeet сказал:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
// pass the baos to be writed with "value", for this example 
byte[] byteArray = baos.toByteArray(); 
Assert.assertEquals("value", new String(byteArray));