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