2009-06-01 16 views
5

मैं इस पर कुछ स्पष्ट जानकारी खोजने की कोशिश कर रहा है, लेकिन मैं करने के लिए नहीं कर पाए हैं - या तो क्या मैं अस्पष्ट करने के लिए किया गया है मुझे समझने के लिए क्या, हो रहा है या गलत बात के लिए भी विशिष्ट मिल गया है, उदाहरण के लिए एक यूनिट परीक्षण के लिए एक ट्यूटोरियल जो AuthorizeAttribute परीक्षण करता है।मैं एक कस्टम एक्शनफ़िल्टर को यूनिटटेस्ट कैसे कर सकता हूं?

: (पी एक तीसरा विकल्प, ज़ाहिर है कि मुझे पता है कि मैं जानकारी मैं के लिए ... जो मामले में मैं अभी भी मदद की जरूरत है देख रहा हूँ पढ़ रहा हूँ भी गूंगा कर रहा हूँ की है, क्योंकि मैं गूंगा हूँ) (यकीन है कि कार्रवाई की आवश्यकताओं को पूरा करने के लिए)

  • एक दिया ActionFilter करता है यही कारण है कि यह करना चाहिए था

    1. एक दिया ActionFilter एक कार्रवाई करने के लिए लागू किया जाता है यही कारण है कि: मैं दो बातों का परीक्षण करने में सक्षम होना चाहते हैं ।

    और मैं पता कर रहा हूँ। क्या कोई मुझे सही दिशा में धक्का दे सकता है कि मुझे वास्तव में परीक्षण करने की क्या ज़रूरत है? परीक्षणों की व्यवस्था, अधिनियम और कार्य अनुभागों में मुझे क्या होना चाहिए?


    एक छोटी सी विस्तार, अगर मैं पर्याप्त स्पष्ट नहीं कर रहा हूँ:

    मैं एक CustomValidationFilter कि अगर दो सबमिट किए गए फ़ॉर्म मान ही कर रहे हैं की जाँच करने के लिए, और एक ModelStateError जोड़ने अगर नहीं माना जाता है की है। मैं यह सत्यापित करने के त्रुटि सही त्रुटि संदेश के साथ जोड़ा जाता है, तो मान ही नहीं हैं चाहते हैं, और त्रुटि है कि नहीं कहा कि यदि मान बराबर (और गैर-नल) कर रहे हैं।

    मैं भी एक GuestbookController पर एक Write कार्रवाई की है। मैं यह सत्यापित करना चाहता हूं कि फ़िल्टर इस क्रिया पर लागू होता है।

  • +0

    आप संभवतः इस के लिए अपने काम कोड पोस्ट कर सकते हैं? मुझे विशेषता बनाने के लिए मिला है, लेकिन मुझे परिणामस्वरूप एक्सचेंजिंग कॉन्टेक्स्ट में गुजरने में समस्याएं आ रही हैं। –

    +0

    हाय मार्क! मेरा कोड http://snipplr.com/users/RockinForGod/ –

    उत्तर

    4

    अपने परीक्षण में प्रतिबिंब का उपयोग करना।

    var method = typeof(MyController).GetMethod("MyMethod"); 
        var attribute = method.GetCustomAttributes(typeof(CustomValidationFilter),false); 
             .Cast<CustomValidationFilter>() 
             .SingleOrDefault(); 
    
        Assert.IsNotNull(attribute); 
        Assert.AreEqual("value", atttribute.SomeProperty); 
    

    अपनी कक्षा में विधि के लिए एक इकाई परीक्षण बनाएं। उपयुक्त डेटा के साथ फ़िल्टरकॉन्टेक्स्ट को मॉक करें और जांचें कि जिस भी विधि को सेट करना है, वास्तव में आप उन्हें क्या उम्मीद करते हैं।

    public void AttributeTest() 
    { 
        var httpContext = MockRepository.GenerateMock<HttpContextBase>(); 
        var controller = new FakeController(); 
        controller.controllerContext = new ControllerContext(httpContext, new RouteData(), controller); 
        ... 
    
        attribute.OnActionExecuting(filterContext); 
    
        Assert... 
    
    } 
    
    +0

    पर उपलब्ध है धन्यवाद! मुझे यह समझने में थोड़ी देर लग गई कि मुझे एट्रिब्यूटटेस्ट के लिए जरूरी चीजों को कैसे नकल करना है, लेकिन मुझे लगता है कि मुझे अब मिल गया है। अगर किसी को यह पता चलता है और दिलचस्पी है, तो मैं कोड को एक संपादन में पोस्ट करूंगा - बस यहां टिप्पणी करें और मैं अपने टेस्ट कोड के साथ प्रश्न अपडेट कर दूंगा। –

    +0

    @Tomas मैं बिल्कुल तुमने किया क्या के रूप में मैं सिर्फ एक सवाल पूछने के लिए क्राफ्टिंग गया था के साथ एक पोस्ट में रुचि होगी। उस ने कहा कि क्या आप आवश्यक डेटा को मॉक करने में सहायता के लिए एमवीसी कोंट्रिब। टेस्टहेल्पर का उपयोग कर सकते हैं? – ahsteele

    +0

    @ahsteele: के बाद से मैं अब इस पर काम किया यह एक समय हो गया है, लेकिन ऐसा लगता है मैं http://snipplr.com/users/RockinForGod/ करने के लिए एक काम कर उदाहरण जोड़ा है कि आप के लिए पर्याप्त नहीं है, तो आप हमेशा एक पूछ सकते हैं नया सवाल यह बताता है कि आपके पास और क्या चाहिए। –

    0

    यहाँ एक ब्लॉग पोस्ट का वर्णन करता है कि विस्तार करने के लिए कैसे और यूनिट कस्टम फ़िल्टर अधिकृत परीक्षण है। ब्लॉग पोस्ट में आपकी दोनों चिंताओं का विवरण दिया गया है, अर्थात् यह जांचने के लिए कि किसी दिए गए एक्शनफिल्टर को एक क्रिया के साथ-साथ यह जांचने के लिए कैसे किया जाता है कि एक्शनफिल्टर ऐसा करता है जो इसे करना है।

    http://blog.geniar.com/index.php/2009/05/aspnet-mvc-testing-a-custom-authorize-filters/

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