0

我正在尝试将一个存储OutputStream为一个类的成员,以便我可以从多个方法写入它。我把这个 jUnit 测试放在一起来证明我遇到的问题。

public class XmlStreamWriterTest {

private OutputStream outputStream;

@Before
public void setUp() throws Exception {
    File file = new File("xmltester.xml");
    this.outputStream = new FileOutputStream(file);
}

@After
public void tearDown() throws Exception {
    this.outputStream.close();
}

//This doesn't work.
@Test
public void testOutputStream() throws Exception {
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
    XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(this.outputStream);

    xmlStreamWriter.writeStartElement("test");
    xmlStreamWriter.writeCharacters("This is a test.");
    xmlStreamWriter.writeEndElement();

    xmlStreamWriter.flush();
}


//This works
@Test
public void testOutputStreamLocal() throws Exception {
    File file = new File("xmltester2.xml");
    OutputStream outputStreamLocal = new FileOutputStream(file);
    XMLOutputFactory xmlOutputFactory = XMLOutputFactory.newInstance();
    XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(outputStreamLocal);

    xmlStreamWriter.writeStartElement("test");
    xmlStreamWriter.writeCharacters("This is a test.");
    xmlStreamWriter.writeEndElement();

    xmlStreamWriter.close();
    }
}

在生成的文件中,只有第二种方法将任何值推送到文件中。我必须直接传递OutputStream给每个方法吗?为什么testOutputStream()方法不起作用?

我正在使用 jrockit jdk 1.6.0_29,但我尝试在 JDK 8 上运行,并且效果相同。

4

1 回答 1

1

如果您在调试器中单步执行此测试并在每个测试的“刷新/关闭”(即最后一个)行上放置一个断点,那么当您单步执行它时,您可以看到文件在两种情况下都已写入。

问题是你的设置方法。

这就是正在发生的事情......

  1. 调用设置,创建 outputStream(这将覆盖任何现有文件!!)
  2. testOutputStream 工作并输出文件
  3. 再次调用安装程序,因为这里创建了一个输出流,第一次测试的文件将被覆盖
  4. 第二个测试设置另一个输出流

基本上,将代码从你的设置方法移到第一个测试用例中

于 2015-02-09T16:57:07.967 回答