我即将为直接输出到 OutputStream 的 XML 解析 Java 类编写 junit 测试。例如xmlWriter.writeString("foo");
,会产生类似<aTag>foo</aTag>
写入到 XmlWriter 实例中保存的输出流的内容。问题是如何测试这种行为。一种解决方案当然是让 OutputStream 成为 FileOutputStream,然后通过打开写入的文件来读取结果,但这不是很优雅。
Ciryon
问问题
21355 次
3 回答
29
使用ByteArrayOutputStream,然后使用toByteArray()从中获取数据。这不会测试它如何写入流(一次一个字节或作为一个大缓冲区),但通常你不应该关心它。
于 2008-10-22T09:55:08.463 回答
3
如果您可以将 Writer 传递给 XmlWriter,我会将其传递给StringWriter
. 您可以使用它查询StringWriter
's 的内容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());
}
于 2008-10-22T14:03:14.860 回答
3
这很简单。正如@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));
于 2016-09-13T16:17:07.750 回答