2013-06-25 6 views
5

मैं एक मजाक (Nsubstitute के माध्यम से) कक्षा तक पहुंचने की कोशिश कर रहा हूं जिसे निर्माता पर इंजेक्शन दिया गया था।ऑटोफिक्चर + NSubstitute: एक नकली ठंडा?

मैं निम्नलिखित कोड

var fixture = new Fixture() 
    .Customize(new AutoNSubstituteCustomization()); 

var sut = fixture.Create<MyService>(); 

Sut सफलतापूर्वक बनाया जाता है, और कहा जाता है एक अंतरफलक के एक मज़ाक उड़ाया संस्करण का उपयोग कर रहा था "IFileUtils" "MyService" के निर्माता पर इंजेक्ट किया जाता है।

लेकिन मैं यह करने के लिए उपयोग की जरूरत है, तो मेरा मानना ​​है कि पढ़ने के बाद मैं वस्तु स्थिर करने के लिए तो मैं इतना

var fileUtilMock= fixture.Freeze<Mock<IFileUtils>>(); 

लेकिन इस कोड मेरा मानना ​​है कि के रूप में "नकली" एक Moq वाक्य रचना है जैसे कि यह करने के लिए उपयोग किया है की जरूरत है नहीं मिला

आम तौर पर एक वर्ग आप कर के एक Nsubstitute बनाने के लिए निम्नलिखित

var fileUtilMock= Substitute.For<IFileUtils>(); 

लेकिन निश्चित रूप से इस पर रोक नहीं है, इसलिए इसके इस्तेमाल नहीं किया और निर्माता में इंजेक्ट किया।

कोई भी मदद कर सकता है?

उत्तर

10

this Mocking tools comparison article by Richard Banks से अनुमान के आधार पर, और कैसे AutoMoq काम करता है, मेरा मानना ​​है कि:

  • NSubstitute Mock और Mock.Object Moq की तरह करता है
  • एक AutoFixture.Auto * एक्सटेंशन हुक के बीच एक जुदाई नहीं है इंटरफेस के [मॉक] कार्यान्वयन की आपूर्ति के लिए SpecimenBuilderNode में, यानीfixture.Create<IFileUtils>()
  • फ्रीज काम करना चाहिए इसलिए आप सिर्फ इतना कहना है सक्षम होना चाहिए एक var result = fixture.Create<IFileUtils>(); fixture.Inject(result)

के बराबर है:

var fileUtilMock = fixture.Freeze<IFileUtils>(); 
+0

@ डैनियल हिल्गार्थ मेरे किसी भी सम्मेलन में से कोई भी अच्छा है: डी जितना चाहें उतना संपादित करने के लिए स्वतंत्र महसूस करें और/या पोस्ट को हटाने के लिए मुझे बताएं! –

6

आपको MyService उदाहरण बनाने से पहले स्वत: मॉक किए गए उदाहरण को फ्रीज करना होगा।

अद्यतन:

रूबेन Bartelink के रूप में बताते हैं, NSubstitute साथ तुम सब करने की है:

var fixture = new Fixture() 
    .Customize(new AutoNSubstituteCustomization()); 

var substitute = fixture.Freeze<IFileUtils>(); 

..और फिर NSubstitute के विस्तार के तरीकों का उपयोग करें।

इस तरह, वही, जमे हुए, उदाहरण MyService कन्स्ट्रक्टर को प्रदान किया जाएगा।

उदाहरण:

एक अंतरफलक IInterface के लिए:

public interface IInterface 
{ 
    object MakeIt(object obj); 
} 

तुम सब साथ क्या करना है है:

var substitute = fixture.Freeze<IInterface>(); 
substitute.MakeIt(dummy).Returns(null); 

Returns वास्तव में NSubstitute में एक विस्तार विधि है।

+0

लेकिन यह मेरा मानना ​​है कि Moq के लिए है, मैं NSubstitute उपयोग कर रहा हूँ, और नकली - मॉक नहीं मिला या मौजूद है .. – Martin

+0

आप सही हैं। मैंने अभी जवाब अपडेट किया है। –

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