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.

¿Fue útil?

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 StringWriterel 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));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top