Test di ciò che è scritto su un OutputStream Java
-
03-07-2019 - |
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.
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));