2008-10-22 40 views
21

我將爲直接輸出到OutputStream的XML解析Java類編寫junit測試。例如,xmlWriter.writeString("foo");會生成類似<aTag>foo</aTag>的內容,以寫入保存在XmlWriter實例內的輸出流中。問題是如何測試這種行爲。一種解決方案當然是讓OutputStream成爲FileOutputStream,然後通過打開寫入的文件來讀取結果,但它不是很優雅。測試寫入Java OutputStream的內容

回答

23

使用ByteArrayOutputStream,然後使用toByteArray()從中獲取數據。這不會測試它如何將寫入流(一次一個字節或作爲一個大緩衝區),但通常你不應該在意這一點。

3

如果您可以將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()); 
} 
2

很簡單:

然後,像你可以編寫代碼的東西。正如@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));