Domanda

Sto per scrivere test di junit per una classe Java di analisi XML che emette direttamente su OutputStream. Ad esempio xmlWriter.writeString("foo"); produrrebbe qualcosa come <aTag>foo</aTag> da scrivere nel flusso di output contenuto nell'istanza XmlWriter. La domanda è come testare questo comportamento. Una soluzione sarebbe ovviamente quella di lasciare che OutputStream fosse un FileOutputStream e quindi leggere i risultati aprendo il file scritto, ma non è molto elegante.

È stato utile?

Soluzione

Usa un ByteArrayOutputStream e poi ottieni i dati che ne derivano utilizzando toByteArray () . Questo non metterà alla prova come scrive nello stream (un byte alla volta o come un grande buffer) ma di solito non dovresti preoccupartene comunque.

Altri suggerimenti

Se riesci a passare un Writer a XmlWriter, lo passerei a StringWriter. Puoi interrogare i contenuti di toString() usando OutputStream su di esso.

Se devi passare un ByteArrayOutputStream, puoi passare un <=> e puoi anche chiamare <=> su di esso per ottenere il suo contenuto come stringa.

Quindi puoi scrivere qualcosa come:

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

È semplice. Come diceva @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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top