2010-07-13 9 views
13

में httpcontext का उपयोग करके मैं सी # 4.0 का उपयोग कर रहा हूं और मुझे एक सेवा परीक्षण इकाई की आवश्यकता है। सेवा के अंदर का कार्य उस चर के समान पथ देता है जिसे मैंने अपेक्षित कहा है, यह वह मार्ग है जिसे मैं वापस पाने की उम्मीद कर रहा हूं। लेकिन जब मैं इस परीक्षण को चलाता हूं तो मुझे त्रुटि मिल रही है कि HttpContext.Current NULL है। इस मुद्दे को ठीक करने के लिए मैं क्या कर सकता हूं ताकि परीक्षण चलाया जा सके?यूनिट परीक्षण

[TestMethod] 
public void GetPathTest() 
{ 
    var expected = System.IO.Path.GetFullPath(HttpContext.Current.Server.MapPath("~/Certificates/")); 
    var path = _mockService.Setup(o => o.GetPath()).Returns(expected); 
} 

उत्तर

17

की तरह पल मैं कर सकते हैं पर कोशिश कर सकते हैं HttpContext के लिए मेरा पूरा रैपर नहीं मिला जिसे मैंने पहले उपयोग किया था, लेकिन फिलहाल हम एक खाली अनुरोध के लिए एक संदर्भ बनाते हैं और वहां से जाते हैं, जैसे:

SimpleWorkerRequest request = new SimpleWorkerRequest("","","", null, new StringWriter()); 
HttpContext context = new HttpContext(request); 

तो इकाई परीक्षण में प्रारंभ या इस प्रकार इकाई परीक्षण ही (इससे पहले कि आप की उम्मीद बनाने) में आप वर्तमान HttpContext सेट कर सकते हैं:

HttpContext.Current = context; 

तो बस नकली संदर्भ और संभव नकली sessionstate, आदि शरीर से बाहर जैसी ज़रूरत।

(संपादित करें: यह सब VS2008 में है, रास्ते में 3.5 फ्रेमवर्क)।

+0

प्रतिक्रिया के लिए धन्यवाद! यह ऐसा हुआ, हालांकि मैंने सही पथ और एड्रेस को जोड़कर सरल कार्यकर्ता को थोड़ा सा संशोधित किया। – Rob

2

आप ASP.Net इकाई परीक्षण के लिए बनाई गई विशेषताओं को देख

[HostType("ASP.NET")] 

यह link to MSDN है इसके बारे में काफी अच्छा लेख

1

मैं इसे संदर्भ के लिए पोस्ट कर रहा हूं। यह कोई आसान समाधान नहीं है, और बतख टाइपिंग के बारे में बातचीत (यह नीम हकीमों अगर ..):

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

http://haacked.com/archive/2007/09/09/ihttpcontext-and-other-interfaces-for-your-duck-typing-benefit.aspx

यह प्रासंगिक और पढ़ने लायक है; क्योंकि कोई IHttpContext नहीं है, परीक्षण परीक्षण कार्यान्वयन बनाना संभव नहीं है - जब तक कि आप यहां डक टाइपिंग लाइब्रेरी का उपयोग करने पर विचार न करें। हालांकि यह प्रत्यक्ष जवाब नहीं है।

उम्मीद है कि मदद करता है।

2

आप निम्नलिखित के साथ अपने परीक्षा पद्धति को सजाने सकता है विशेषताएं:

[TestMethod] 
[HostType("ASP.NET")] 
[UrlToTest("http://localhost:xxxx/")] 
[AspNetDevelopmentServerHost("$(SolutionDir)\\xxx\\", "/")] 
public void TestMethod() 
{ 
    ... 
} 

फिर अपने इकाई परीक्षण proj में एक Default.aspx फ़ाइल जोड़ने।

परीक्षण विधि के अंदर आप आसानी से HttpContext तक पहुंच सकते हैं। क्या आप डीबग करना चाहते हैं तो आपको कुछ निशान के रूप में MSDN से समझाया उपयोग कर सकते हैं या अनुदेश System.Diagnostics.Debugger.Break()

public void TestMethod() 
{ 
    System.Diagnostics.Debugger.Break(); 

    ... 
} 

साथ डिबगिंग निष्पादन बीच में और उसके बाद की प्रक्रिया के लिए डिबगर संलग्न: https://msdn.microsoft.com/en-us/library/vstudio/c6wf8e4z(v=vs.100).aspx