Тестирование того, что написано в Java OutputStream

StackOverflow https://stackoverflow.com/questions/225073

  •  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));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top