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




Используйте ByteArrayOutputStream, а затем получите данные с помощью toByteArray (). Это не будет проверять как, которое он записывает в поток (по одному байту за раз или как большой буфер), но обычно вам все равно это не нужно.
Если вы можете передать 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());
}
Это просто. Как сказал @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));