Question

Je suis sur le point d'écrire des tests junit pour une classe Java d'analyse syntaxique qui sort directement vers un OutputStream. Par exemple, xmlWriter.writeString("foo"); produirait quelque chose comme <aTag>foo</aTag> à écrire dans le flux de sortie contenu dans l'instance de XmlWriter. La question est de savoir comment tester ce comportement. Une solution serait bien sûr de laisser le OutputStream être un FileOutputStream, puis de lire les résultats en ouvrant le fichier écrit, mais ce n’est pas très élégant.

Était-ce utile?

La solution

Utilisez un ByteArrayOutputStream et ensuite, obtenez les données en utilisant toByteArray () . Cela ne testera pas comment il écrit dans le flux (un octet à la fois ou en tant que grand tampon), mais vous ne devriez généralement pas vous en soucier de toute façon.

Autres conseils

Si vous pouvez passer un graveur à XmlWriter, je lui donnerais un StringWriter. Vous pouvez interroger le contenu de toString() en utilisant OutputStream dessus.

Si vous devez passer un ByteArrayOutputStream, vous pouvez passer un <=> et vous pouvez également appeler <=> dessus pour obtenir son contenu sous forme de chaîne.

Ensuite, vous pouvez coder quelque chose comme:

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

C'est simple. Comme @JonSkeet a dit:

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top