, मैं कभी कभी परीक्षण है कि सही ढंग से बात वे परखने के लिए बनाई परीक्षण करने के लिए कॉन्फ़िगर नहीं किया गया लगता है AutoFixture.AutoMoq पैकेज के साथ AutoFixture का उपयोग करना, लेकिन समस्या यह है डिफ़ॉल्ट (ढीला) नकली व्यवहार के कारण की खोज की कभी नहीं किया गया था:मैं ऑटोमोक कस्टमाइज़ेशन को सख्त मॉकबैवियर का उपयोग कैसे कर सकता हूं?
public interface IService
{
bool IsSomethingTrue(int id);
}
void Main()
{
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var service = fixture.Freeze<Mock<IService>>();
Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
मैं सख्त व्यवहार के साथ मोक्स बनाना चाहता हूं, इसलिए हमें उन तरीकों के लिए Setup()
पर कॉल करने के लिए मजबूर होना पड़ता है। मैं इस तरह प्रत्येक व्यक्ति नकली के लिए ऐसा कर सकते हैं:
fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
लेकिन AutoMoqCustomization() और विभिन्न ISpecimenBuilder
और अन्य कार्यान्वयन के लिए स्रोत कोड के माध्यम से कंघी के बाद, मैं बहुत सबसे अच्छा तरीका करने के लिए के रूप में खो रहा हूँ बस सभी बनाने के लिए सख्त व्यवहार के साथ मोक्स शुरू हो जाते हैं। ढांचा बहुत लचीला और एक्स्टेंसिबल प्रतीत होता है, इसलिए मुझे यकीन है कि ऐसा करने का एक आसान तरीका है - मैं बस यह नहीं समझ सकता कि कैसे।
प्रतिक्रिया के लिए धन्यवाद। मैं देखूंगा कि मैं इसे काम कर सकता हूं या नहीं। सख्त मोजे के बारे में: यदि मॉक्स वास्तव में "झुंड" थे, तो मुझे लगता है कि आपका बिंदु मान्य है। दुर्भाग्य से, मेरे ज्यादातर मोक्स वास्तव में * स्टब्स * के उद्देश्य को पूरा करते हैं, जिन्हें एक मूल्य वापस करने की उम्मीद है। यदि एसयूटी स्टब से लौटाए गए डेटा पर निर्भर करता है, और मैंने स्टब सेट नहीं किया है, तो सबसे अच्छे मामले में परीक्षण विफल हो जाएगा, और सबसे बुरे मामले में परीक्षण गलत कारण के लिए पास होगा। एनआरई कहां से आ रहा है, इसे कम करने के बजाए, मुझे किसी भी मामले में, तुरंत कोड की रेखा को देखने के लिए, जिसे स्टब को कॉन्फ़िगर करने की आवश्यकता है, को पसंद करना होगा। – StriplingWarrior
@StriplingWarrior http://blog.ploeh.dk/2013/10/23/mocks-for-commands-stubs-for-queries –
मुझे लगता है कि लेख का उदाहरण बहुत बढ़िया है: उपयोगकर्ता वस्तु बनाने और वापस करने के लिए CQS को तोड़ना जिसमें GetUser विधि को प्रदान की गई आईडी भी नहीं है।वे ऐसे बदलाव नहीं हैं जिन्हें मैं आम तौर पर तरीकों से बना रहा हूं। जो परिवर्तन मैं नियमित रूप से देखता हूं उन्हें वैसे भी यूनिट परीक्षण में बदलाव की आवश्यकता होती है, भले ही वे उस आलेख में अंतिम सही उदाहरण की तरह लिखे जाएं। जब ऐसा होता है, तो मुझे लगता है कि सख्त मोक्स 'असफल-तेज व्यवहार बहुत समय बचाता है और - अधिक महत्वपूर्ण बात यह सुनिश्चित करने में सहायता करता है कि मेरे यूनिट परीक्षण परीक्षण कर रहे हैं जो वे परीक्षण करने का दावा करते हैं। – StriplingWarrior