Probar lo que está escrito en Java OutputStream
-
03-07-2019 - |
Pregunta
Estoy a punto de escribir pruebas junit para una clase Java de análisis XML que genera directamente un OutputStream.Por ejemplo xmlWriter.writeString("foo");
produciría algo como <aTag>foo</aTag>
que se escribirá en el flujo de salida contenido dentro de la instancia de XmlWriter.La pregunta es cómo probar este comportamiento.Por supuesto, una solución sería dejar que OutputStream sea un FileOutputStream y luego leer los resultados abriendo el archivo escrito, pero no es muy elegante.
Solución
Use un 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 por lo general no debería importarle eso de todas formas.
Otros consejos
Si puedes pasar un Writer a XmlWriter, yo le pasaría un StringWriter
.Puedes consultar el StringWriter
el contenido usando toString()
en eso.
Si tienes que pasar un OutputStream
, puedes pasar un ByteArrayOutputStream
y también puedes llamar toString()
en él para obtener su contenido como una cadena.
Entonces puedes codificar algo como:
public void testSomething()
{
Writer sw = new StringWriter();
XmlWriter xw = new XmlWriter(sw);
...
xw.writeString("foo");
...
assertEquals("...<aTag>foo</aTag>...", sw.toString());
}
Es simple. Como dijo @JonSkeet:
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));