2011-09-10 20 views
6

के कारण विफल रहता है मेरे पास एनयूनीट परीक्षणों की एक श्रृंखला है और कुछ विफल हो रही हैं, फिर भी मुझे कोई कारण नहीं दिख रहा है, और अपवाद मुझे कुछ भी नहीं बता रहा है।NUnit परीक्षण System.AccessViolationException

//Controller Action 
    [HttpPost] 
    [AjaxExceptionHandler] 
    [OutputCache(Duration = 0)] 
    public PartialViewResult SomeAction(long id) 
    { 
     try 
     { 
      var model = _repository.GetModel(id); 
      return PartialView(@"MyPartialView", model); 
     } 
     catch (Exception ex) 
     { 
      exceptionManager.HandleException(ex, FT_EXCEPTION_POLICY); 
      throw; 
     } 
    } 

    //Action Unit Test 
    [Test] 
    [Category(TestConstants.UnitTest)] 
    public void SomeAction_Returns_Expected_View() 
    { 
     var model = Builder<ViewModel>.CreateNew().Build(); 

     repository.Stub(it => it.GetModel(Arg<long>.Is.Anything)).Return(model); 

     var viewResult = (PartialViewResult)someController.SomeAction(1); 
     Assert.AreEqual(@"MyPartialView", viewResult.ViewName); 
    }  

यूनिट टेस्ट अपवाद::

System.AccessViolationException: पढ़ने या संरक्षित स्मृति लिखने के लिए प्रयास किया गया यह मेरा मामला है। यह अक्सर एक संकेत है कि अन्य स्मृति भ्रष्ट है।

यदि मेरी कार्रवाई में मैं आंशिक दृश्य के लिए एक शून्य मान पास करता हूं, जैसे: return PartialView(@"MyPartialView", null); फिर परीक्षण पास हो जाता है।

अन्य समान मामले भी असफल होते हैं, फिर भी अन्य पास होते हैं। मैं प्रत्येक के लिए एक कारण की पहचान करने में सक्षम नहीं हूं।

क्या कोई मुझे गलत पहचानने में मदद कर सकता है?

धन्यवाद,

संपादित करें: ठीक है, मैं सभी अन्य नाकाम रहने के परीक्षण तय है और अब मैं System.AccessViolationException बाईं के साथ ही लोगों की है।

जोड़ा सेटअप प्रक्रिया मेरी परीक्षण फार्म:

[SetUp] 
    public void SetUp() 
    { 
     controllerBuilder = new TestControllerBuilder(); 

     repository = MockRepository.GenerateStub<ISomeRepository>(); 

     someController = new SomeController 
      (repository); 

     controllerBuilder.InitializeController(someController); 
    } 
+0

क्या यह परीक्षण पास होता है यदि आप आउटपुटचैच विशेषता को हटाते हैं? – David

+0

@Dvd - एक ही विशेषता वाले अन्य क्रियाएं बिना किसी समस्या के गुजरती हैं ... लेकिन मैं कोशिश करूंगा ... अभी मैं अंधेरे में शूटिंग कर रहा हूं, देखें कि क्या हिट। संपादित करें: नहीं ... एक ही परिणाम। – AJC

+0

बस निश्चित होने के लिए, क्या यह परीक्षण विफल रहता है जब अलगाव में चलाया जाता है या केवल जब पूरा सूट चलाया जाता है? –

उत्तर

3

एक उत्तर मिला ... वास्तव में बेवकूफ समस्या, प्रोग्रामिंग में सबसे अधिक समस्याओं की तरह। जैसा कि मैं हमेशा कहता हूं, अगर आप इसे पहले कुछ घंटों को हल नहीं कर सकते हैं, तो आप वास्तव में वास्तव में बेवकूफ कुछ जानते हैं।

वह स्थान है जहां मैं इस सवाल का जवाब मिल गया है, मुझे कुछ समय लिया, लेकिन सवाल का नाम बातें मदद नहीं की या तो:

Attempted to read or write protected memory

संक्षेप में, मैं MVCContrib DLLs को बदलने के लिए किया था।

मदद के लिए सभी को धन्यवाद ...

+0

मुझे खुशी है कि आपने इसे हल किया है। क्या आप अपनी प्रतिक्रिया को –

+0

@ रिचर्ड-यहाह को बंद करने में मदद के उत्तर के रूप में चिह्नित कर सकते हैं, लेकिन मुझे इसे करने के लिए 2 दिन का इंतजार करना होगा। सिस्टम मुझे इसे पहले बंद नहीं करने देता है – AJC

0

System.AccessViolationException: पढ़ने या संरक्षित स्मृति लिखने के लिए प्रयास किया गया। यह अक्सर एक संकेत है कि अन्य स्मृति भ्रष्ट है।

यह त्रुटि प्रबंधित/अप्रबंधित कोड के साथ खेलते समय एक क्षेत्र में आती है, विशेष रूप से प्रबंधित कोड में अप्रबंधित संसाधनों को आवंटित करना और उन्हें बहुत जल्दी मुक्त करना, जब प्रबंधित कोड अभी भी ऑपरेटिंग सिस्टम द्वारा जारी किए जा रहे संसाधनों तक पहुंचने के लिए मौजूद है।

आप IntPtr का उपयोग कर रहे हैं, या एक मेमोरी लीक है, या बाहरी COM/Win32 फ़ंक्शंस की घोषणा सही नहीं है, f/e [DllImport (...)] विशेषताओं में।

कोड अधिक criticall में

देखो & presizely

exceptionManager.HandleException(ex, FT_EXCEPTION_POLICY); 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद ... अपवाद हैंडलर का उपयोग मेरे अधिकांश कार्यों में किया जाता है और उनमें से कई पास होते हैं। इसके अलावा, मेरे पास यूनिट टेस्ट केस है जब अपवाद फेंक दिया जाता है और यह सही ढंग से गुजरता है। – AJC

+0

कोशिश पकड़, एक ही परिणाम ... क्या मेरे लिए हो जाता है इसके कि यह एक बहुत ही सरल कोड है बाहर टिप्पणी की ... – AJC

0

यह एक सूत्रण/रेस स्थिति समस्या हो सकती है।

आप परीक्षण में नियंत्रक, कुछ नियंत्रक नहीं बना रहे हैं। इसलिए, कई परीक्षण नियंत्रक के एक ही उदाहरण का उपयोग कर रहे हैं, इससे स्मृति भ्रष्टाचार त्रुटियों का कारण बन सकता है।

प्रत्येक परीक्षण के अंदर नियंत्रक बनाने और निपटाने का प्रयास करें।

+0

त्रुटि होता है, भले ही मैं परीक्षण एक एक करके चलाने ... – AJC

+0

यह हमेशा एक ही परीक्षण है वह असफल हो जाता है और वही पास होता है? –

+0

हाँ, हमेशा वही ... मैंने पिछले कुछ घंटों को उनके बीच एक पैटर्न की तलाश में बिताया है लेकिन एक नहीं ढूंढ सकता ... – AJC

संबंधित मुद्दे