2009-09-14 19 views

Respuesta

4

Supongo que está probando alguna clase propia que use flujos de .NET; llamémoslo MessageSender. Tenga en cuenta que no hay ninguna razón para probar las transmisiones de .NET por sí mismos, ese es el trabajo de Microsoft. No deberías probar el código .NET framework, solo el tuyo.

En primer lugar, asegúrese de que inyecte la corriente utilizada por MessageSender. No lo cree dentro de la clase, pero acéptelo como un valor de propiedad o un argumento de constructor. Por ejemplo:

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); 
    } 
} 

ahora una prueba de ejemplo: usted podría probar que BeginSendHello invoca BeginWrite en la corriente, y envía los bytes correctos. Nos burlaremos de la transmisión y establecemos una expectativa para verificar esto. Estoy usando el marco RhinoMocks en este ejemplo.

[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(); 
}