c# - Testing if another method on same object was called with testing the targetObject -


  पब्लिक क्लास टेस्ट {GetDataset (RandomBoolean अनिश्चित); GetDataset2 (); GetDataset3 (); } सार्वजनिक वर्चुअल शून्य GetDataset3 () {} सार्वजनिक वर्चुअल शून्य GetDataset (RandomBoolean अनिश्चित) {यदि (अनिश्चित। राज्य) {GetDataset2 (); } अन्य {GetDataset3 (); }} // अनिश्चित मजाक कर रहे हैं। सच वापसी करने के लिए स्टेटस / ACT testObject.GetDataset (अनिश्चित मॉक);  

मैं test_bject.getdataset () पर कार्य करते समय GetDataset2 () को आंतरिक रूप से बुलाया गया था या नहीं अगर परीक्षण करना चाहता हूं; मैं टेस्ट ऑब्जेक्ट का मजाक नहीं कर रहा हूं क्योंकि यह टेस्ट ऑब्जेक्ट है, इसलिए यदि मैं करने की कोशिश करता / करती हूं तो

  testObject.AssertWasCalled (x = & gt; x.GetDataset2 ());  

यह मुझे ऐसा करने नहीं देगा क्योंकि testObject एक कथित वस्तु नहीं है मैं राइनो मोक्स 3.5 का उपयोग कर रहा हूं, मुझे निश्चित रूप से यहाँ कुछ याद आ रही है। यह हासिल करने का सबसे अच्छा तरीका क्या है।

संक्षिप्त जवाब है: आप नहीं कर सकते दूसरी बात पर आमतौर पर आप नहीं करना चाहते हैं जब आप यूनिट कक्षा का परीक्षण कर रहे हैं, तो आप यह सुनिश्चित करना चाहते हैं कि कक्षा इसकी गणना सही ढंग से करती है और इसका सही साइड इफेक्ट है आपको कक्षा के आंतरिकों का परीक्षण नहीं करना चाहिए, क्योंकि यह वास्तविक कोड के युग्मन का कारण बनता है और परीक्षण बहुत मजबूत होते हैं यह विचार यह है कि आप अपने वर्ग के कार्यान्वयन को आसानी से बदल सकते हैं और अपने परीक्षणों का उपयोग सुनिश्चित कर सकते हैं कि यह अभी भी सही तरीके से काम करता है यदि आपके परीक्षण आंतरिक राज्य या प्रवाह का निरीक्षण करते हैं तो आप ऐसा नहीं कर पाएंगे।

आपके पास 2 विकल्प हैं (संदर्भ के आधार पर)

  1. आप अपने परीक्षणों को संरक्षित कर सकते हैं एक तरह से कि वे केवल बाह्य रूप से दिखाई देने वाले व्यवहार को देखते हैं
  2. यदि (1) बहुत मुश्किल है, तो गेटडाटासेट 2 को एक अलग वर्ग में पुन: फिर आप GetDataset विधि का परीक्षण करते समय इसे नकली कर पाएंगे।

Comments