Frage

Ich bin über JUnit-Tests für ein XML-Parsing-Java-Klasse, die auf einen Output direkt ausgibt zu schreiben. Zum Beispiel würde xmlWriter.writeString("foo"); etwas produzieren wie <aTag>foo</aTag> an der Innenseite der XmlWriter-Instanz gehalten Output geschrieben werden. Die Frage ist, wie dieses Verhalten zu testen. Eine Lösung wäre natürlich der Output läßt ein Outputstream und dann die Ergebnisse gelesen von der schriftlichen Datei zu öffnen, aber es ist nicht sehr elegant.

War es hilfreich?

Lösung

Verwenden Sie einen ByteArrayOutputStream und dann bekommen die Daten aus, die unter Verwendung toByteArray () . Dies wird nicht testen wie schreibt es in den Stream (ein Byte zu einem Zeitpunkt oder als großer Puffer), aber in der Regel sollten Sie das sowieso nicht.

Andere Tipps

Wenn Sie ein Writer XmlWriter passieren kann, würde ich es ein StringWriter passieren. Sie können die StringWriter anhand des Inhalts toString() auf sie abgefragt werden.

Wenn Sie eine OutputStream passieren müssen, können Sie eine ByteArrayOutputStream passieren und Sie können auch toString() auf nennen es seinen Inhalt als String zu erhalten.

Dann können Sie Code so etwas wie:

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

Es ist ganz einfach. Wie @JonSkeet sagte:

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top