मेरे पास एक ऑब्जेक्ट टेस्ट है कि यह सत्यापित करने के लिए कि कोई ऑब्जेक्ट (Foo
कहें) कुछ निश्चित कॉल (Bar
कहें) जब किसी ईवेंट को कुछ ईवेंट के साथ निकाल दिया जाता है। कहा विधि नकली करने के लिए, मैं आभासी का उपयोग करें और Foo
वर्गकन्स्ट्रक्टर को कॉल करने के लिए moq को कैसे मजबूर करें?
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
ठूंठ हालांकि, इसके बाद के संस्करण में विफल रहा है, बार बुलाया नहीं किया जाएगा, जाहिरा तौर पर क्योंकि फू वस्तु घटना का निर्माण नहीं किया है। क्योंकि .Object पर मिलता बुला जाहिरा तौर पर वस्तु के निर्माण के लिए नकली बलों
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
var workAround = stubbedFoo.Object //adding this workaround will work
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
यह काम करेंगे,: लेकिन अगर मैं नीचे की तरह एक पंक्ति जोड़ें। क्या इस लाइन को जोड़ने से कहीं अधिक सुरुचिपूर्ण समाधान है?
मैं में यह लपेटता देखो .. क्या आपको लगता है कि यह moq में एक दोष है? –
मैं कहूंगा कि यह शायद एक जानबूझकर निर्णय था, लेकिन moq खुला स्रोत है ताकि आप इसे बदल सकें यदि आप चाहें – devshorts