Тестирование того, что написано в Java OutputStream
-
03-07-2019 - |
Вопрос
Я собираюсь написать тесты junit для класса Java для синтаксического анализа XML, который выводится непосредственно в OutputStream. Например, xmlWriter.writeString("foo");
выдаст что-то вроде <aTag>foo</aTag>
для записи в выходной поток, содержащийся в экземпляре XmlWriter. Вопрос в том, как проверить это поведение. Одно из решений, конечно, состояло бы в том, чтобы OutputStream был FileOutputStream, а затем считывал результаты, открывая записанный файл, но это не очень элегантно. Р>
Решение
Используйте ByteArrayOutputStream и затем получите данные из этого с помощью toByteArray () . Это не будет проверять как записывать в поток (по одному байту за раз или как большой буфер), но обычно вам все равно об этом не нужно.
Другие советы
Если вы можете передать Writer в XmlWriter, я бы передал ему StringWriter
. Вы можете запросить содержимое toString()
, используя для этого OutputStream
.
Если вам нужно передать ByteArrayOutputStream
, вы можете передать <=> и также вызвать <=>, чтобы получить его содержимое в виде строки.
Тогда вы можете написать что-то вроде:
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));