测试写入 Java 输出流的内容

2022-09-01 15:53:58

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


答案 1

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


答案 2

如果你能将一个 Writer 传递给 XmlWriter,我会把它传递给 .您可以使用 查询 的内容。StringWriterStringWritertoString()

如果你必须传递 一个,你可以传递 一个,你也可以调用它来获取它的内容作为字符串。OutputStreamByteArrayOutputStreamtoString()

然后,您可以编写如下代码:

public void testSomething()
{
  Writer sw = new StringWriter();
  XmlWriter xw = new XmlWriter(sw);
  ...
  xw.writeString("foo");
  ...
  assertEquals("...<aTag>foo</aTag>...", sw.toString());
}

推荐