Тестирование того, что написано в Java OutputStream - PullRequest
23 голосов
/ 22 октября 2008

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

Ответы [ 3 ]

25 голосов
/ 22 октября 2008

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

3 голосов
/ 22 октября 2008

Если вы можете передать 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 голосов
/ 13 сентября 2016

Все просто. Как сказал @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));
...