2008-10-22 3 views
21

OutputStream에 직접 출력하는 Java 파싱 XML 클래스에 대해 junit 테스트를 작성하려고합니다. 예를 들어 xmlWriter.writeString("foo");<aTag>foo</aTag>과 같은 것을 생성하여 XmlWriter 인스턴스 내부에있는 outputstream에 기록합니다. 문제는이 동작을 테스트하는 방법입니다. 한 가지 해결책은 당연히 OutputStream이 FileOutputStream이되도록 한 다음 작성된 파일을 열어 결과를 읽는 것입니다.하지만 그다지 우아하지는 않습니다.Java OutputStream에 쓰여진 내용을 테스트하십시오.

답변

23

ByteArrayOutputStream을 사용하고 toByteArray()을 사용하여 데이터를 가져옵니다. 이것은 을 어떻게 테스트합니까?은 스트림에 씁니다 (한 번에 한 바이트 또는 큰 버퍼로). 일반적으로 어쨌든 그것에 대해 신경 쓰지 않아야합니다.

3

Writer를 XmlWriter에 전달할 수 있으면 StringWriter을 전달합니다. StringWriter의 내용은 toString()을 사용하여 쿼리 할 수 ​​있습니다.

OutputStream을 전달해야한다면 ByteArrayOutputStream을 전달하고 toString()을 호출하여 내용을 문자열로 가져올 수 있습니다.

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

그것은 간단합니다 : 같은

그럼 당신은 뭔가를 코딩 할 수 있습니다. @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)); 
관련 문제