【问题标题】:Testing what's written to a Java OutputStream测试写入 Java OutputStream 的内容
【发布时间】:2008-10-22 09:53:48
【问题描述】:
我即将为一个直接输出到 OutputStream 的 XML 解析 Java 类编写 junit 测试。例如xmlWriter.writeString("foo"); 会产生类似<aTag>foo</aTag> 的内容,并写入XmlWriter 实例中的输出流。问题是如何测试这种行为。一种解决方案当然是让 OutputStream 成为 FileOutputStream,然后通过打开写入的文件来读取结果,但这不是很优雅。
【问题讨论】:
标签:
java
junit
outputstream
【解决方案2】:
如果您可以将 Writer 传递给 XmlWriter,我会将其传递给 StringWriter。您可以在上面使用toString()查询StringWriter的内容。
如果你必须传递一个OutputStream,你可以传递一个ByteArrayOutputStream,你也可以在它上面调用toString()来获取它的内容作为一个字符串。
然后你可以编写如下代码:
public void testSomething()
{
Writer sw = new StringWriter();
XmlWriter xw = new XmlWriter(sw);
...
xw.writeString("foo");
...
assertEquals("...<aTag>foo</aTag>...", sw.toString());
}
【解决方案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));