7

की एक घटना का परीक्षण कैसे कर सकता हूं, मैं OnException, OnActionExecuted एक एमवीसी नियंत्रक की घटना का परीक्षण करना चाहता हूं।मैं एक एमवीसी नियंत्रक

अगर मैं इस तरह नकली का उपयोग करें:

 var httpContext = MockRepository.GenerateMock<HttpContextBase>(); 
     var request = MockRepository.GenerateMock<HttpRequestBase>(); 

     httpContext.Expect(c => c.Request).Return(request).Repeat.AtLeastOnce(); 
     request.Expect(r => r.IsAuthenticated).Return(true).Repeat.AtLeastOnce(); 


     var controller = new MyController() ; 

     controller.ControllerContext = new ControllerContext(httpContext, 
                  new RouteData(), 
                  controller); 

     var result = controller.Execute() as ViewResult; 

... कार्रवाई विधि निष्पादित हो रहा है, लेकिन घटनाओं लागू नहीं कर रहे हैं।

+1

मुझे नहीं लगता कि आपने वास्तव में घटनाओं से जुड़ा हुआ है ... आप कैसे जानते हैं कि वे निष्पादित नहीं कर रहे हैं? – jrista

+0

डीबग मोड और ब्रेकपॉइंट्स – Lullaby

उत्तर

15

यह में से एक है एमवीसी के सिद्धांतों को अलग करना। जब आप एक विधि का परीक्षण कर रहे हैं, तो आप विधि को किसी भी फ़िल्टर से स्वतंत्र तरीके से परीक्षण कर रहे हैं। (और ऑनएक्सप्शन() और ऑनएक्शन एक्स्चटिंग() वास्तव में सिर्फ गौरवशाली फ़िल्टर हैं।)

यदि आप स्वतंत्र रूप से उन अन्य तरीकों का परीक्षण करना चाहते हैं, तो आप ऐसा करने के लिए स्वतंत्र हैं। आम तौर पर जिस तरह से आप इस बारे में जाना चाहते हैं तो तरह फिल्टर को फोन करके यह है:

((IActionFilter)controller).OnActionExecuting(...) 
((IExceptionFilter)controller).OnException(...) 

आप संदर्भ बनाना होगा इन तरीकों को पारित करने के लिए वस्तुओं। अंत में, आपके पास तीन यूनिट परीक्षण हैं: ऑनएक्शनएक्सटिंग() के लिए एक, ऑनएक्सप्शन() के लिए एक, और एक वास्तविक विधि जिसका आप परीक्षण कर रहे हैं। इस सेटअप के बारे में अच्छी बात यह है कि एक बार जब आप एक बार फिल्टर का परीक्षण करते हैं, तो आपको किसी भी अन्य यूनिट परीक्षणों के लिए उनके बारे में चिंता करने की ज़रूरत नहीं है।

उदाहरण के लिए, यदि आपके पास Method1(), Method2(), और Method3() है, तो आपको विधि + फ़िल्टर के प्रत्येक संयोजन का परीक्षण करने की आवश्यकता नहीं है। बस पांच यूनिट परीक्षण हैं: OnActionExecuting(), OnException(), Method1(), Method2(), और Method3()। यह अनावश्यक परीक्षण को समाप्त करता है और आपके कोड में संभावित बग को ट्रैक करना आसान बनाता है।