2009-09-14 34 views

Trả lời

4

Tôi giả sử bạn đang thử nghiệm một số lớp của riêng bạn sử dụng các luồng .NET; hãy gọi nó là MessageSender. Lưu ý rằng không có lý do gì để kiểm tra đơn vị dòng .NET, đó là công việc của Microsoft. Bạn không nên đơn vị kiểm tra .NET framework code, chỉ riêng của bạn.

Trước tiên, hãy đảm bảo rằng bạn tiêm luồng được sử dụng bởi MessageSender. Đừng tạo nó bên trong lớp nhưng chấp nhận nó như một giá trị thuộc tính hoặc đối số hàm tạo. Ví dụ:

public sealed class MessageSender 
{ 
    private readonly Stream stream; 

    public MessageSender(Stream stream) 
    { 
     if (stream == null) 
     throw new ArgumentNullException("stream"); 
     this.stream = stream; 
    } 

    public IAsyncResult BeginSendHello(AsyncCallback callback, object state) 
    { 
     byte[] message = new byte[] {0x01, 0x02, 0x03}; 
     return this.stream.BeginWrite(
     message, 0, message.Length, callback, state); 
    } 

    public void EndSendHello(IAsyncResult asyncResult) 
    { 
     this.stream.EndWrite(asyncResult); 
    } 
} 

Bây giờ một thử nghiệm Ví dụ: bạn có thể kiểm tra rằng BeginSendHello gọi BeginWrite trên dòng, và gửi các byte đúng. Chúng tôi sẽ thử luồng và thiết lập kỳ vọng để xác minh điều này. Tôi đang sử dụng khung RhinoMocks trong ví dụ này.

[Test] 
public void BeginSendHelloInvokesBeginWriteWithCorrectBytes() 
{ 
    var mocks = new MockRepository(); 
    var stream = mocks.StrictMock<Stream>(); 
    Expect.Call(stream.BeginWrite(
     new byte[] {0x01, 0x02, 0x03}, 0, 3, null, null)); 
    mocks.ReplayAll(); 

    var messageSender = new MessageSender(stream); 
    messageSender.BeginSendHello(null, null); 

    mocks.VerifyAll(); 
} 
Các vấn đề liên quan