测试写入Java OutputStream的内容

时间:2008-10-22 09:53:48

标签: java junit outputstream

我即将为直接输出到OutputStream的XML解析Java类编写junit测试。例如,xmlWriter.writeString("foo");会产生类似<aTag>foo</aTag>的内容,以便写入XmlWriter实例中保存的输出流。问题是如何测试这种行为。一个解决方案当然是让OutputStream成为FileOutputStream然后通过打开写入的文件来读取结果,但它不是很优雅。

3 个答案:

答案 0 :(得分:25)

使用ByteArrayOutputStream,然后使用toByteArray()从中获取数据。这不会测试它如何写入流(一次一个字节或作为一个大缓冲区),但通常你不应该关心它。

答案 1 :(得分: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 :(得分: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));