【问题标题】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案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));
        

        【讨论】:

          猜你喜欢
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          • 2012-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多