इस वर्ग पर विचार करें:Moq - सत्यापित करने के लिए कैसे एक संपत्ति के मूल्य सेटर के माध्यम से सेट कर दिया जाता है कि
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
चेकइन विधि जानबूझकर खाली है। अब मेरे पास प्रत्येक विधि को कॉल करने की स्थिति को सत्यापित करने के लिए कुछ परीक्षण विधियां हैं I
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
Content c = new Content();
c.CheckOut();
Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}
दूसरा परीक्षण गलत कारणों से गुजरता है। तो मैं यह जांचने के लिए मॉकिंग (moq) का उपयोग कैसे कर सकता हूं कि चेकइन IscheckedOut प्रॉपर्टी सेट कर रहा है?
धन्यवाद।
संपादित
स्पष्ट करने के लिए: मैं) एक विधि चेकइन (बुलाया जिनका काम यह गलत पर IsCheckedOut स्थिति स्थापित करने के लिए है।
आप मेरे टेस्ट कोड में देखेंगे कि टेस्ट वापस लौटाएगा भले ही मैं संपत्ति मूल्य को गलत पर सेट न करूं; यह उम्मीद है, यहां कुछ भी गलत नहीं है।
मुझे लगता है कि मेरा प्रश्न विशेष रूप से यह है कि मैं कैसे सत्यापित कर सकता हूं कि CheckIn() विधि ने IscheckedOut प्रॉपर्टी को गलत पर सेट किया है? यही वह है जिसे मैं व्यवहारिक सत्यापन कहूंगा।
मुझे विश्वास है कि कुछ टिप्पणियों ने राज्य सत्यापन के लिए कुछ ऐसा करने का सुझाव दिया है? यदि ऐसा है तो मैं नहीं मानता कि सब पर इस हिस्से मजाक में किसी भी मूल्य नहीं होता है हम बस का उपयोग कर सकते हैं जब:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
बेशक
मैं गलत हो सकता है, तो मदद कृपया मुझे इन अवधारणाओं :)
यह वास्तव में Ischecked आउट संपत्ति के उद्देश्य पर निर्भर करता है - यदि यह वस्तु का व्यवहार है कि कुछ चेक इन करने के बाद चेक किया गया है तो गलत है तो आपके ऊपर क्या है ठीक है। यदि संपत्ति एक बड़ी व्यवहार की जांच करने के लिए आपकी कक्षा में एक खिड़की है तो वह वही होगा जो मैं राज्य सत्यापन कहूंगा। तो ... वास्तव में इरादे पर निर्भर करता है। – FinnNk
इस समस्या को हल करने लग रहा था: http://stackoverflow.com/questions/2853313/moq-how-to-correctly-mock-set-only-properties –
सीधे सवाल का जवाब नहीं है, लेकिन मैं यह जांचने के लिए आवश्यक है कि एक संपत्ति स्पष्ट रूप से सत्य पर सेट की गई थी: 'mock.SetupProperty (foo => foo.SomeProperty);/* परीक्षण परीक्षण कार्रवाई * /; mock.VerifySet (foo => foo.SomeProperty = it.IsAny(), "कुछ प्रॉपर्टी सेट होनी चाहिए"); Assert.True (mock.Object.SomeProperty, "कुछ प्रॉपर्टी को सत्य पर सेट किया जाना चाहिए था"); –