2012-09-18 41 views
7

Tôi có một loạt các lớp mà tất cả đều thực hiện một Giao diện và một trong các tham số là một StreamWriter.C# Unit Kiểm tra tham số StreamWriter

Tôi cần kiểm tra nội dung của StreamWriter.

Tôi đang cố gắng tìm cách tránh viết các tệp văn bản trên máy chủ thử nghiệm và mở chúng để kiểm tra nội dung.

Có cách nào để nhanh chóng chuyển đổi nội dung/luồng StreamWriter thành biến StringBuilder không?

Trả lời

11

Bạn không thể kiểm tra số StreamWriter. Bạn có thể kiểm tra dòng cơ bản mà nó đang ghi. Vì vậy, bạn có thể sử dụng một MemoryStream trong thử nghiệm đơn vị của bạn và điểm này StreamWriter với nó. Một khi nó đã hoàn thành văn bản bạn có thể đọc từ nó.

[TestMethod] 
public void SomeMethod_Should_Write_Some_Expected_Output() 
{ 
    // arrange 
    using (var stream = new MemoryStream()) 
    using (var writer = new StreamWriter(stream)) 
    { 
     // act 
     sut.SomeMethod(writer); 

     // assert 
     string actual = Encoding.UTF8.GetString(stream.ToArray()); 
     Assert.AreEqual("some expected output", actual); 
    } 
} 
+1

'StreamWriter' sử dụng UTF-8 theo mặc định, vì vậy đó là những gì nên được sử dụng để có được' actual'. –

+0

Điểm tốt @Jon, như mọi khi. –

+0

Điều này làm việc, cảm ơn. Chỉ có điều khác nhau là tôi tuyên bố chuỗi thực tế var bên ngoài của việc sử dụng, và thử nghiệm nó bên ngoài của việc sử dụng là tốt. –

9

tôi sẽ đề nghị bạn thay đổi các tham số để TextWriter nếu có thể - lúc này bạn có thể sử dụng một StringWriter.

Ngoài ra, bạn có thể tạo ra một StreamWriter xung quanh một MemoryStream, sau đó kiểm tra các nội dung về điều đó MemoryStream sau (bằng cách tua nó, hoặc chỉ gọi ToArray() để có được nội dung hoàn chỉnh như một mảng byte. Nếu bạn thực sự muốn trở thành thử nghiệm văn bản Mặc dù vậy, nó chắc chắn là đơn giản để sử dụng một StringWriter.

+0

Có thể thay đổi nó, nhưng giao diện đang được sử dụng bởi một số lớp khác. –

+3

@ user295734: Bất cứ thứ gì * sử dụng * nó vẫn có thể truyền trong một 'StreamWriter' - nhưng nếu bạn thực sự chỉ muốn một cái gì đó bạn có thể viết văn bản,' TextWriter' gần như chắc chắn là một trừu tượng tốt hơn để sử dụng. Bạn chỉ cần thay đổi * triển khai * của giao diện ... và tôi mong họ sẽ ổn thôi. –

+0

Nếu tôi bắt đầu làm mới, tôi có thể quay trở lại thực hiện các thay đổi, chỉ có nhiều thay đổi mã người khác và tôi không có thời gian để kiểm tra tất cả mã của họ mã của họ.) Cảm ơn bạn đã chuẩn bị cho lần sau. –

2

bạn có thể thay thế nó bằng một StreamWriter mà ghi vào một MemoryStream.

1

Trong trường hợp đó bạn cần phải thử các trường hợp thử nghiệm. bạn có thể sử dụng các khuôn khổ thích Đó là lợi thế của mocking framework là, bạn có thể xác minh nội dung của các đối tượng, nhưng bạn không phải nhấn máy chủ hoặc chiếm tài nguyên máy chủ.

Liên kết này sẽ cung cấp cho bạn các ví dụ cơ bản: http://www.codeproject.com/Articles/10719/Introducing-Rhino-Mocks

+2

Tại sao bạn cho rằng chế nhạo là bắt buộc trong trường hợp này? Mocking sẽ giúp nếu OP muốn kiểm tra xem mã của anh ta hoạt động như thế nào trong các trường hợp lỗi, nhưng chỉ cần tìm hiểu những gì đang được viết, không cần phải sử dụng chế nhạo. –

+1

Chúng tôi đang sử dụng Moq trong thử nghiệm đơn vị của mình. –

Các vấn đề liên quan