2008-10-22 17 views
21

Estoy a punto de escribir pruebas junit para una clase Java de análisis XML que se envía directamente a un OutputStream. Por ejemplo, xmlWriter.writeString("foo"); produciría algo como <aTag>foo</aTag> que se escribirá en la salida de salida que se encuentra dentro de la instancia de XmlWriter. La pregunta es cómo probar este comportamiento. Una solución sería, por supuesto, dejar que OutputStream sea un FileOutputStream y luego leer los resultados abriendo el archivo escrito, pero no es muy elegante.Comprobando lo que está escrito en Java OutputStream

Respuesta

23

Utilice ByteArrayOutputStream y luego obtenga los datos de eso usando toByteArray(). Esto no probará cómo escribe en la secuencia (un byte a la vez o como un gran búfer) pero generalmente no debería preocuparse por eso de todos modos.

3

Si puede pasar un escritor a XmlWriter, lo pasaría a StringWriter. Puede consultar el contenido de StringWriter usando toString() en él.

Si tiene que pasar un OutputStream, puede pasar un ByteArrayOutputStream y también puede llamar al toString() para obtener su contenido como una Cadena.

A continuación, puede codificar algo como:

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

Es muy sencillo. Como @JonSkeet dijo:

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