का उपयोग कर एक निजी क्षेत्र का परीक्षण करना क्या यूनिट परीक्षण में निजी क्षेत्र तक पहुंच प्राप्त करना संभव है?एमएसटीएस्ट
उत्तर
तरह से सामान्य रूप में निजी क्षेत्रों या तरीकों प्राप्त करने के लिए प्रतिबिंब का प्रयोग है। हालांकि, यह आसान बनाने के लिए यूनिट टेस्ट फ्रेमवर्क में एक सहायक वर्ग, PrivateObject
शामिल है। docs देखें। सामान्य तौर पर, जब मैं इस का उपयोग किया है, मैं की तरह एक विस्तार के तरीकों बनाने समाप्त कर दिया निम्नलिखित:
public static int GetPrivateField(this MyObject obj)
{
PrivateObject po = new PrivateObject(obj);
return (int)po.GetField("_privateIntField");
}
आप एक स्थिर कक्षा में निजी क्षेत्रों को पाने के लिए हालांकि, की जरूरत है, आप के साथ जाने के लिए की आवश्यकता होगी सीधे प्रतिबिंब।
नहीं। यदि आप अच्छे यूनिट टेस्ट लिख रहे हैं, तो आपको किसी भी निजी क्षेत्र तक पहुंचने की आवश्यकता नहीं है। यूनिट टेस्ट का परीक्षण करना चाहिए कि मूल्यों के ज्ञात सेट में पारित होने पर, एक विधि एक निश्चित तरीके से व्यवहार करती है (या तो उपयुक्त डेटा लौटकर या ज्ञात फैशन में निर्भरताओं का उपयोग करके)।
यदि आप बाद में परीक्षण करने की कोशिश कर रहे हैं, तो आप जिस कक्षा में परीक्षण कर रहे हैं उसमें निर्भरता को इंजेक्ट करने के लिए निर्भरता इंजेक्शन का उपयोग करें। आपके परीक्षणों के लिए आप उन निर्भरताओं तक पूर्ण पहुंच प्राप्त करेंगे।
धन्यवाद दोस्तों, मुझे एहसास नहीं हुआ कि मैं टीडीडी सिद्धांतों का उल्लंघन कर रहा था। धन्यवाद – Michelle
सवाल यह था कि यह संभव था, न कि यह एक सर्वोत्तम अभ्यास है। – stuartd
जबकि मैं सिद्धांत में जस्टिन से सहमत हूं, वस्तुतः एक व्यक्ति को उप-इष्टतम कोड के लिए यूनिट परीक्षण लिखना पड़ता है जिसे बदला नहीं जा सकता है या आसानी से बदला नहीं जा सकता है। – Dave
यह नहीं कह रहा कि यह एक अच्छा विचार है लेकिन मैंने आंतरिक दृश्यों का उपयोग किया है। इस प्र अधिक अलोकप्रिय जवाब में से एक पर
देखो:
- 1. एमएसटीएस्ट
- 2. एमएसटीएस्ट
- 3. एमएसटीएस्ट
- 4. एमएसटीएस्ट
- 5. एमएसटीएस्ट
- 6. एमएसटीएस्ट
- 7. क्या एमएसटीएस्ट
- 8. ExpectedExceptionAttribute एमएसटीएस्ट
- 9. एमएसटीएस्ट टेस्टमेडेंस निर्भरता इंजेक्शन
- 10. एमएसटीएस्ट एक्सएमएल डेटासोर्स
- 11. एमएसटीएस्ट यूनिट परीक्षण
- 12. एमएसटीएस्ट और एनएचबीर्नेट
- 13. एमएसटीएस्ट - स्टैक ओवरव्लो एक्सेप्शन
- 14. एमएसटीएस्ट अपेक्षित एक्सेप्शन
- 15. एमएसटीएस्ट कोड कवरेज
- 16. एमएसटीएस्ट क्लास पूरी कक्षा
- 17. सी # लाइब्रेरी टू एमएसटीएस्ट प्रोजेक्ट
- 18. एमएसटीएस्ट सम्मान [सशर्त()] विशेषता बनाएं?
- 19. एमएसटीएस्ट, MyClassInitialize, और आवृत्ति चर
- 20. एमएसटीएस्ट एक्सेसर फ़ाइल में "डेस्कटॉप" संदर्भ
- 21. एमएसटीएस्ट यूनिटटेस्टिंग फ़्रेमवर्क 10.1 बनाम 10.0
- 22. पृष्ठभूमि धागे से एक एमएसटीएस्ट विफल
- 23. न्यूट बनाम एमबीयूनीट बनाम एमएसटीएस्ट बनाम xUnit.net
- 24. एमएसटीएस्ट के साथ पंक्ति कैसे करें?
- 25. सी # परिनियोजन Item एमएसटीएस्ट यूनिट परीक्षण
- 26. एमएसटीएस्ट में डेटा संचालित परीक्षण - TestContext.DataRow
- 27. एमएसटीएस्ट नए टेस्ट नहीं ढूंढ रहा
- 28. न्यूटिट बनाम विजुअल स्टूडियो 2010 का एमएसटीएस्ट?
- 29. एमएसटीएस्ट एनवायरनमेंट। कंटेंट डायरेक्टरी गलत वीएस 2012
- 30. एमएसटीएस्ट का उपयोग कर ऑब्जेक्ट्स का नकल कैसे करें?
धन्यवाद @ माइक मैंने कोशिश की है और अच्छा काम करता है। – Michelle
@ मिशेल आपका स्वागत है। –
आप ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) ऑब्जेक्ट का उपयोग करके एक स्थिर वर्ग में निजी फ़ील्ड प्राप्त और सेट कर सकते हैं (ऑब्जेक्ट (PrivateObject प्रकार के विरोध में!) – stuartd