2012-09-04 20 views
5

Moq का उपयोग करने से आ रहा है, मैं सेटअप मैक्स को सत्यापित करने में सक्षम होने के लिए उपयोग किया जाता है। जैसा कि आप जानते हैं, यह आसान है जब आप परीक्षण के तहत अपना कोड सुनिश्चित करना चाहते हैं वास्तव में निर्भरता पर एक विधि कहा जाता है।विजुअल स्टूडियो 2012 नकली - मैं एक विधि को कैसे सत्यापित करूं?

उदा। MOQ:

// Set up the Moq mock to be verified 
mockDependency.Setup(x => x.SomethingImportantToKnow()).Verifiable("Darn, this did not get called."); 
target = new ClassUnderTest(mockDependency); 
// Act on the object under test, using the mock dependency 
target.DoThingsThatShouldUseTheDependency(); 
// Verify the mock was called. 
mockDependency.Verify(); 

मैं, जो काफी चालाक है और मैं Moq करने के लिए इसे प्राथमिकता देते शुरू कर है (इसके लिए एक बेहतर नाम जानने की कमी के लिए) VS2012 के "नकली फ्रेमवर्क" का उपयोग कर के रूप में ऐसा लगता है थोड़ा और अभिव्यक्तिपूर्ण और शिम्स को आसान बनाता है। हालांकि, मैं यह नहीं समझ सकता कि मोक के सत्यापन योग्य/सत्यापन कार्यान्वयन के समान व्यवहार कैसे पुन: पेश किया जाए। मुझे स्टब्स पर इंस्टेंस ऑब्सर्वर प्रॉपर्टी मिली, जो ऐसा लगता है कि यह मेरी इच्छा हो सकती है, लेकिन 9/4/12 के रूप में कोई दस्तावेज़ीकरण नहीं है, और मुझे यह स्पष्ट नहीं है कि इसका उपयोग कैसे किया जाए, अगर यह सही बात भी है।

क्या कोई मुझे Moq Verifiable/VS2012 के Fakes के साथ सत्यापित करने पर सही दिशा में इंगित कर सकता है?

- 9/5/12 संपादित करें - मुझे समस्या का हल हुआ, लेकिन मैं अभी भी जानना चाहता हूं कि वीएस2012 नकली के साथ ऐसा करने का एक अंतर्निहित तरीका है या नहीं। अगर कोई ऐसा कर सकता है तो मैं इसे थोड़ा सा खोल दूंगा। मेरे पास मूलभूत विचार है (क्षमा करें अगर यह संकलित नहीं होता है)।

[TestClass] 
public class ClassUnderTestTests 
{ 
    private class Arrangements 
    { 
     public ClassUnderTest Target; 
     public bool SomethingImportantToKnowWasCalled = false; // Create a flag! 
     public Arrangements() 
     { 
      var mockDependency = new Fakes.StubIDependency // Fakes sweetness. 
      { 
       SomethingImportantToKnow =() => { SomethingImportantToKnowWasCalled = true; } // Set the flag! 
      } 
      Target = new ClassUnderTest(mockDependency); 
     } 
    } 

    [TestMethod] 
    public void DoThingThatShouldUseTheDependency_Condition_Result() 
    { 
     // arrange 
     var arrangements = new Arrangements(); 
     // act 
     arrangements.Target.DoThingThatShouldUseTheDependency(); 
     // assert 
     Assert.IsTrue(arrangements.SomethingImportantToKnowWasCalled); // Voila! 
    } 
} 

- 9/5/12 समाप्ति संपादित करें -

धन्यवाद!

+0

मैंने यहां एक समान प्रश्न का उत्तर दिया http://stackoverflow.com/a/13794884/333082 – cecilphillip

उत्तर

3

चूंकि मैंने कोई बेहतर समाधान नहीं सुना है, इसलिए मैं अब 9/5/12 से संपादन को कॉल कर रहा हूं।

EDIT सर्वोत्तम प्रथाओं का वर्णन करने वाले जादू लेख को मिला। http://www.peterprovost.org/blog/2012/11/29/visual-studio-2012-fakes-part-3/

0

हालांकि जटिल परिदृश्यों में यह समझ में आ सकता है, लेकिन आपको अलग-अलग तरीकों के बारे में जानकारी संग्रहीत करने के लिए अलग (व्यवस्था) कक्षा का उपयोग करने की आवश्यकता नहीं है। यह सत्यापित करने का एक आसान तरीका है कि एक विधि को फॉक्स के साथ बुलाया गया था, जो एक अलग वर्ग के क्षेत्र की बजाय स्थानीय चर में जानकारी संग्रहीत करता है। आपके उदाहरण की तरह यह दर्शाता है कि ClassUnderTest IDependency इंटरफ़ेस की एक विधि को कॉल करता है।

[TestMethod] 
public void DoThingThatShouldUseTheDependency_Condition_Result() 
{ 
    // arrange 
    bool dependencyCalled = false; 
    var dependency = new Fakes.StubIDependency() 
    { 
     DoStuff =() => dependencyCalled = true; 
    } 
    var target = new ClassUnderTest(dependency); 

    // act 
    target.DoStuff(); 

    // assert 
    Assert.IsTrue(dependencyCalled); 
}