Mam zamiar napisać testy junitowe dla XML parsującej klasy Java, która jest wyprowadzana bezpośrednio do OutputStream. Na przykład: xmlWriter.writeString("foo");
wyprodukowałby coś takiego, jak <aTag>foo</aTag>
, które zostanie zapisane w strumieniu wyjściowym przechowywanym wewnątrz instancji XmlWriter. Pytanie brzmi, jak przetestować to zachowanie. Jednym rozwiązaniem byłoby oczywiście, aby OutputStream był FileOutputStream, a następnie odczytać wyniki, otwierając zapisany plik, ale nie jest zbyt elegancki.Testowanie tego, co napisano w Javie OutputStream
21
A
Odpowiedz
23
Użyj ByteArrayOutputStream, a następnie pobierz dane z tego przy użyciu toByteArray(). Nie przetestuje to, jak zapisuje się do strumienia (jeden bajt na raz lub jako duży bufor), ale zazwyczaj i tak nie powinno się tego obawiać.
3
Jeśli możesz przekazać Writer do XmlWriter, przekażę mu StringWriter
. Możesz zapytać o zawartość StringWriter
za pomocą toString()
na jej temat.
Jeśli musisz przekazać numer OutputStream
, możesz przekazać ByteArrayOutputStream
i możesz również zadzwonić pod numer toString()
, aby uzyskać jego zawartość jako ciąg.
Następnie można kodować coś takiego:
public void testSomething()
{
Writer sw = new StringWriter();
XmlWriter xw = new XmlWriter(sw);
...
xw.writeString("foo");
...
assertEquals("...<aTag>foo</aTag>...", sw.toString());
}
2
To proste. Jako @JonSkeet powiedział:
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));