2008-10-22 25 views
21

Doğrudan bir OutputStream'e çıktı veren bir XML ayrıştırma Java sınıfı için deneme testleri yazmak üzereyim. Örneğin, xmlWriter.writeString("foo");, XmlWriter örneğinin içinde tutulan çıkışa yazılacak <aTag>foo</aTag> gibi bir şey üretecektir. Soru, bu davranışı nasıl test edeceğinizdir. Bir çözüm elbette, OutputStream'in bir FileOutputStream olmasına izin vermek ve daha sonra yazılı dosyayı açarak sonuçları okumak olacaktır, ancak çok zarif değildir.Bir Java Çıktı Akışı için yazılanları test etme

cevap

23

Bir ByteArrayOutputStream kullanın ve verileri toByteArray() kullanarak alın. Bu, değerini akışına nasıl yazdığını (tek seferde bir bayt veya büyük bir arabellek) test etmeyecektir, ancak genellikle bununla ilgilenmemelisiniz.

3

Bir Yazar'ı XmlWriter'e aktarabiliyorsanız, bunu StringWriter'a iletirim. StringWriter 'in içeriğini toString() kullanarak sorgulayabilirsiniz.

OutputStream'u geçmeniz gerekiyorsa, bir ByteArrayOutputStream geçirebilir ve içeriğini bir Dize olarak almak için de toString() numarasını da arayabilirsiniz.

public void testSomething() 
{ 
    Writer sw = new StringWriter(); 
    XmlWriter xw = new XmlWriter(sw); 
    ... 
    xw.writeString("foo"); 
    ... 
    assertEquals("...<aTag>foo</aTag>...", sw.toString()); 
} 
2

Çok basit: gibi

Sonra birşeyler kod. @JonSkeet'in dediği gibi:

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));