2008-12-07 38 views
133

कहा जाता है Moq का उपयोग करते हुए यह मेरी समझ है कि मैं परीक्षण कर सकते हैं कि अगर मैं एक उच्च स्तर विधि कॉल, यानी एक विधि कॉल हो जाएगा है:निर्धारित करने के लिए एक विधि

public abstract class SomeClass() 
{  
    public void SomeMehod() 
    { 
     SomeOtherMethod(); 
    } 

    internal abstract void SomeOtherMethod(); 
} 

मैं परीक्षण करना चाहते हैं कि अगर मैं SomeMethod() पर कॉल करें तो मुझे उम्मीद है कि SomeOtherMethod() कहा जाएगा।

क्या मुझे लगता है कि इस प्रकार का परीक्षण एक मॉकिंग फ्रेमवर्क में उपलब्ध है?

उत्तर

152

आप देख सकते हैं, उदा, अगर कुछ में एक विधि आप मज़ाक उड़ाया है सत्यापित करें का उपयोग करके बुलाया गया है, .:

static void Main(string[] args) 
{ 
     Mock<ITest> mock = new Mock<ITest>(); 

     ClassBeingTested testedClass = new ClassBeingTested(); 
     testedClass.WorkMethod(mock.Object); 

     mock.Verify(m => m.MethodToCheckIfCalled()); 
} 

class ClassBeingTested 
{ 
    public void WorkMethod(ITest test) 
    { 
     //test.MethodToCheckIfCalled(); 
    } 
} 

public interface ITest 
{ 
    void MethodToCheckIfCalled(); 
} 

लाइन छोड़ दिया जाता है टिप्पणी यह ​​एक MockException फेंक जाएगा जब आप सत्यापित करें कहते हैं। अगर यह असम्बद्ध है तो यह गुजर जाएगा।

+4

यह सही उत्तर है। हालांकि, आपको कुछ समझना चाहिए। आप CANNNOT एक विधि/संपत्ति का नकल करते हैं जो सार या वर्चुअल नहीं है (जाहिर है, सभी इंटरफ़ेस विधियों और गुणों को मजाक किया जा सकता है)। – Will

+25

-1: द एक्सपेक्ट (...)। सत्यापन योग्य() इस कोड में अनावश्यक है। एएए का उपयोग करके सत्यापित करें कि आपके पास सही है। । सत्यापन योग्य उपयोग के लिए है। सत्यापित करें() i, .e। कोई तर्क संस्करण नहीं। Http://stackoverflow.com/questions/980554/what-is-the-purpose-of-verifiable-in-moq/1728496#1728496 –

+0

यह कन्स्ट्रक्टर इंजेक्शन के बिना किया जा सकता है? –

6

नहीं, नकली परीक्षण मानता है कि आप कुछ टेस्टेबल डिज़ाइन पैटर्न का उपयोग कर रहे हैं, जिनमें से एक इंजेक्शन है। आपके मामले में आप परीक्षण करेंगे SomeClass.SomeMethod और SomeOtherMethod किसी अन्य इकाई में लागू किया जाना चाहिए जिसे इंटरफेस करने की आवश्यकता है।

आपका Someclass कन्स्ट्रक्टर New(ISomeOtherClass) जैसा दिखता है। फिर आप ISomeOtherClass पर नकल करेंगे और उम्मीद के लिए SomeOtherMethod पर उम्मीद स्थापित करेंगे और उम्मीद को सत्यापित करेंगे।

+0

मुझे लगता है कि यह दृष्टिकोण स्वीकार किए गए उत्तर के साथ फिट बैठता है। – brimble2010

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