Pergunta

Estou prestes a testes JUnit de gravação para um XML analisar classe Java que saídas diretamente para um OutputStream. Por exemplo xmlWriter.writeString("foo"); iria produzir algo como <aTag>foo</aTag> a serem gravados para o outputstream realizada dentro da instância XmlWriter. A questão é como testar esse comportamento. Uma solução seria, evidentemente, para deixar o OutputStream ser um FileOutputStream e, em seguida, ler os resultados abrindo o arquivo escrito, mas não é muito elegante.

Foi útil?

Solução

Use a ByteArrayOutputStream e depois se os dados para fora do que o uso de ToByteArray () . Isto não test como ele grava no fluxo (um byte de cada vez ou como um grande buffer), mas geralmente você deve se preocupam com isso de qualquer maneira.

Outras dicas

Se você pode passar um escritor para XmlWriter, gostaria de passá-lo um StringWriter. Você pode consultar o conteúdo do StringWriter usando toString() nele.

Se você tem que passar por um OutputStream, você pode passar um ByteArrayOutputStream e você também pode ligar para toString() sobre ele para obter o seu conteúdo como uma string.

Depois, você pode código algo como:

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

É simples. Como @JonSkeet disse:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top