2008-10-22 11 views
21

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

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