2012-05-28 15 views
5

का उपयोग कर एक निजी क्षेत्र का परीक्षण करना क्या यूनिट परीक्षण में निजी क्षेत्र तक पहुंच प्राप्त करना संभव है?एमएसटीएस्ट

उत्तर

7

तरह से सामान्य रूप में निजी क्षेत्रों या तरीकों प्राप्त करने के लिए प्रतिबिंब का प्रयोग है। हालांकि, यह आसान बनाने के लिए यूनिट टेस्ट फ्रेमवर्क में एक सहायक वर्ग, PrivateObject शामिल है। docs देखें। सामान्य तौर पर, जब मैं इस का उपयोग किया है, मैं की तरह एक विस्तार के तरीकों बनाने समाप्त कर दिया निम्नलिखित:

public static int GetPrivateField(this MyObject obj) 
{ 
    PrivateObject po = new PrivateObject(obj); 
    return (int)po.GetField("_privateIntField"); 
} 

आप एक स्थिर कक्षा में निजी क्षेत्रों को पाने के लिए हालांकि, की जरूरत है, आप के साथ जाने के लिए की आवश्यकता होगी सीधे प्रतिबिंब।

+0

धन्यवाद @ माइक मैंने कोशिश की है और अच्छा काम करता है। – Michelle

+0

@ मिशेल आपका स्वागत है। –

+1

आप ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) ऑब्जेक्ट का उपयोग करके एक स्थिर वर्ग में निजी फ़ील्ड प्राप्त और सेट कर सकते हैं (ऑब्जेक्ट (PrivateObject प्रकार के विरोध में!) – stuartd

2

नहीं। यदि आप अच्छे यूनिट टेस्ट लिख रहे हैं, तो आपको किसी भी निजी क्षेत्र तक पहुंचने की आवश्यकता नहीं है। यूनिट टेस्ट का परीक्षण करना चाहिए कि मूल्यों के ज्ञात सेट में पारित होने पर, एक विधि एक निश्चित तरीके से व्यवहार करती है (या तो उपयुक्त डेटा लौटकर या ज्ञात फैशन में निर्भरताओं का उपयोग करके)।

यदि आप बाद में परीक्षण करने की कोशिश कर रहे हैं, तो आप जिस कक्षा में परीक्षण कर रहे हैं उसमें निर्भरता को इंजेक्ट करने के लिए निर्भरता इंजेक्शन का उपयोग करें। आपके परीक्षणों के लिए आप उन निर्भरताओं तक पूर्ण पहुंच प्राप्त करेंगे।

+0

धन्यवाद दोस्तों, मुझे एहसास नहीं हुआ कि मैं टीडीडी सिद्धांतों का उल्लंघन कर रहा था। धन्यवाद – Michelle

+2

सवाल यह था कि यह संभव था, न कि यह एक सर्वोत्तम अभ्यास है। – stuartd

+0

जबकि मैं सिद्धांत में जस्टिन से सहमत हूं, वस्तुतः एक व्यक्ति को उप-इष्टतम कोड के लिए यूनिट परीक्षण लिखना पड़ता है जिसे बदला नहीं जा सकता है या आसानी से बदला नहीं जा सकता है। – Dave

1

यह नहीं कह रहा कि यह एक अच्छा विचार है लेकिन मैंने आंतरिक दृश्यों का उपयोग किया है। इस प्र अधिक अलोकप्रिय जवाब में से एक पर

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

देखो:

Unit testing and checking private variable value

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