2011-09-08 13 views
5

मेरी समस्या निम्न है:राइनो मॉक बनाम डीबग मोड?

मेरे पास एमएस यूनिट परीक्षण है जो एमवीसी रूटिंग परीक्षणों के लिए stubbed http संदर्भ का उपयोग करता है। लेकिन कोड (जो राइनो नकली उपयोग करता है) का एक हिस्सा समस्याग्रस्त है:

enter image description here

इस तरह के एक त्रुटि क्यों होता है:

var httpContextMock = MockRepository.GenerateStub<HttpContextBase>(); 
httpContextMock.Stub(c => c.Request.AppRelativeCurrentExecutionFilePath) 
    .Return(url); 

डीबग मोड में, दूसरी पंक्ति एक अपवाद फेंकता है? जबकि परीक्षण डीबगर के बिना निकाल दिए जाते हैं, सबकुछ ठीक काम करता है।

सादर

+0

क्या आपके स्टब्बेड व्यवहार को सही तरीके से बुलाया जाता है? क्या यह सही मूल्य लौटा रहा है? –

+0

डीबग मोड में मैं अपवाद के कारण जांच नहीं कर सकता। डीबग मोड के बिना कोड ठीक काम करता प्रतीत होता है। File.AppendAllText (@ "c: \ debug.txt", httpContextMock.Request.AppRelativeCurrentExecutionFilePath) फ़ाइल में सही स्टब किए गए मान लिखता है। – jwaliszko

+2

अजीब। मैं उम्मीद करता हूं कि यह या तो उस त्रुटि को दे और काम न करे, या उस त्रुटि को न दें। –

उत्तर

1

यह वास्तव में अजीब है। मेरे लिए अजीब बात यह है कि आपका कोड गैर-डीबग मोड में काम करता है। Request संपत्ति को स्टब नहीं किया गया है, इसलिए आप वास्तव में नहीं जान सकते कि यह वापस क्या होगा। आप निम्न कोशिश कर सकते हैं:

var httpContextMock = MockRepository.GenerateStub<HttpContextBase>(); 
var httpRequestMock = MockRepository.GenerateStub<HttpContextBase>(); 
httpContextMock.Stub(c => c.Request).Return(httpRequestMock); 
httpRequestMock.Stub(c => c.AppRelativeCurrentExecutionFilePath).Return(url); 
0

मैं भी मेरा साथ इस मुद्दे पर हो रही थी, और समाधान के लिए .suo फ़ाइल को हटाने से यह तय हो गई। (-> अपवाद डीबग मेनू)

enter image description here

0

समस्या अपने ठूंठ विधि है

मैं जब Break when Common Language Runtime Exception is thrown सेटिंग है, जो suo फ़ाइल में संग्रहीत किया जाता टॉगल भी अलग अपवाद प्राप्त करने के लिए लग रहे हैं। केवल .Return() का उपयोग करके यह इस मान को केवल एक बार दे देगा। यदि आपको इस बात पर परवाह नहीं है कि स्टब को कितनी बार मूल्य वापस करना चाहिए तो आपको .Return().Repeat.Any() का उपयोग करना चाहिए।

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