2008-10-22 33 views
21

Tôi sắp viết các bài kiểm tra junit cho một lớp Java phân tích cú pháp XML xuất trực tiếp ra một OutputStream. Ví dụ xmlWriter.writeString("foo"); sẽ tạo ra một cái gì đó như <aTag>foo</aTag> để được ghi vào outputstream được giữ bên trong cá thể XmlWriter. Câu hỏi đặt ra là làm thế nào để kiểm tra hành vi này. Một giải pháp dĩ nhiên là để cho OutputStream trở thành một FileOutputStream và sau đó đọc kết quả bằng cách mở tập tin văn bản, nhưng nó không phải là rất thanh lịch.Kiểm tra những gì được viết cho một Java OutputStream

Trả lời

23

Sử dụng ByteArrayOutputStream và sau đó lấy dữ liệu ra khỏi đó bằng cách sử dụng toByteArray(). Điều này sẽ không kiểm tra cách ghi vào luồng (một byte tại một thời điểm hoặc bộ đệm lớn) nhưng thường bạn không nên quan tâm đến điều đó.

3

Nếu bạn có thể chuyển Writer đến XmlWriter, tôi sẽ chuyển nó qua một số StringWriter. Bạn có thể truy vấn nội dung của StringWriter bằng cách sử dụng toString() trên đó.

Nếu bạn phải vượt qua OutputStream, bạn có thể chuyển số ByteArrayOutputStream và bạn cũng có thể gọi toString() trên đó để nhận nội dung dưới dạng Chuỗi.

Sau đó, bạn có thể mã hóa một cái gì đó như:

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

Nó đơn giản. Như @JonSkeet đã nói:

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)); 
Các vấn đề liên quan