2009-09-14 18 views

उत्तर

4

मुझे लगता है कि आप अपने स्वयं के कुछ वर्ग का परीक्षण कर रहे हैं जो .NET धाराओं का उपयोग करता है; आइए इसे MessageSender पर कॉल करें। ध्यान दें कि .NET स्ट्रीम स्वयं इकाई का परीक्षण करने का कोई कारण नहीं है, यह माइक्रोसॉफ्ट का काम है। आपको इकाई परीक्षण नहीं करना चाहिए .NET फ्रेमवर्क कोड, बस अपना खुद का।

सबसे पहले, सुनिश्चित करें कि MessageSender द्वारा उपयोग की जाने वाली धारा को इंजेक्ट करें। इसे कक्षा के अंदर न बनाएं बल्कि इसे संपत्ति मूल्य या कन्स्ट्रक्टर तर्क के रूप में स्वीकार करें। उदाहरण के लिए:

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

अब एक उदाहरण टेस्ट: आप परीक्षण कर सकता है कि BeginSendHello धारा पर BeginWrite invokes, और सही बाइट्स भेजता है। हम स्ट्रीम का मज़ाक उड़ाएंगे और इसे सत्यापित करने की उम्मीद स्थापित करेंगे। मैं इस उदाहरण में RhinoMocks ढांचे का उपयोग कर रहा हूं।

[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(); 
} 
संबंधित मुद्दे