2012-12-18 4 views
5

द्वारा संसाधित स्ट्रीम कैसे प्राप्त करें मेरे पास निम्न विधि है जो HttpResponse ऑब्जेक्ट में एक स्ट्रीम लिखती है।सी # httpResponse.BinaryWrite

public HttpResponse ShowPDF(Stream stream) 
    { 
     MemoryStream memoryStream = (MemoryStream) stream; 

     httpResponse.Clear(); 
     httpResponse.Buffer = true; 
     httpResponse.ContentType = "application/pdf"; 
     httpResponse.BinaryWrite(memoryStream.ToArray()); 
     httpResponse.End(); 

     return httpResponse; 

    } 

इसका परीक्षण करने के लिए, मुझे संसाधित स्ट्रीम को पुनर्प्राप्त करने की आवश्यकता है। क्या httpResponse ऑब्जेक्ट से स्ट्रीम पढ़ने के लिए कुछ है?

+0

मॉक एक HttpResponseBase। – SLaks

+0

httpResponse इस विधि के बाहर घोषित किया गया है? –

+0

@betogrun: परीक्षण के लिए आप किस मॉकिंग फ्रेमवर्क का उपयोग करते हैं? –

उत्तर

2

मेरे पास दो विचार हैं ... एक HttpResponse का नकल करने के लिए, और दूसरा वेब सर्वर अनुकरण करना है।

1. HttpResponse

मजाक मैं इस से पहले मुझे पता था कि जो मजाक ढांचे आप इस्तेमाल किया लिखा था। यहां टाइपमैक का उपयोग करके आप अपनी विधि का परीक्षण कैसे कर सकते हैं।

यह मानता है कि आप, विधि करने के लिए अपने HttpResponse चर पारित विधि बदलते इस प्रकार है:

public void ShowPDF(Stream stream, HttpResponse httpResponse) 
बेशक

आप इसके बजाय अपने पृष्ठ वस्तु पर एक संपत्ति के लिए इसे पारित करने के लिए इस बदल जाएगा, अगर यह होता है आपके पेज क्लास का सदस्य

और यहाँ कैसे आप एक नकली HttpResponse मदद से इसका परीक्षण कर सकता है की एक उदाहरण है:

internal void TestPDF() 
{ 
    FileStream fileStream = new FileStream("C:\\deleteme\\The Mischievous Nerd's Guide to World Domination.pdf", FileMode.Open); 
    MemoryStream memoryStream = new MemoryStream(); 
    try 
    { 
     memoryStream.SetLength(fileStream.Length); 
     fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length); 

     memoryStream.Flush(); 
     fileStream.Close(); 

     byte[] buffer = null; 

     var fakeHttpResponse = Isolate.Fake.Instance<HttpResponse>(Members.ReturnRecursiveFakes); 
     Isolate.WhenCalled(() => fakeHttpResponse.BinaryWrite(null)).DoInstead((context) => { buffer = (byte[])context.Parameters[0]; }); 

     ShowPDF(memoryStream, fakeHttpResponse); 

     if (buffer == null) 
      throw new Exception("It didn't write!"); 
    } 
    finally 
    { 
     memoryStream.Close(); 
    }   
} 

2. एक वेब सर्वर

शायद आप एक वेब सर्वर का अनुकरण करके ऐसा कर सकते हैं अनुकरण। यह पागल लग सकता है, लेकिन ऐसा लगता है कि यह इतना कोड नहीं है। आईआईएस के बाहर वेब फॉर्म चलाने के बारे में कुछ लिंक यहां दिए गए हैं।

Can I run a ASPX and grep the result without making HTTP request?

http://msdn.microsoft.com/en-us/magazine/cc163879.aspx

+0

आपके उत्तर के लिए धन्यवाद खोया Hobbit, लेकिन मैं TypeMock का उपयोग नहीं कर सकता। एकमात्र अनुमोदित फ्रैमोवेर्क जिसे मैं उपयोग करने की अनुमति देता हूं वह एनएमॉक है। – betogrun

+1

@betogrun Pity ... शायद आपकी पोस्ट को एनएमॉक के साथ टैग करें ... शायद एक एनएमक विशेषज्ञ इसे पायेगा। –

+0

ज़रूर! मैंने अभी पोस्ट संपादित किया है। मैं NMock का उपयोग करके अपना उदाहरण लागू करने का प्रयास करूंगा धन्यवाद! – betogrun