जैसे ही मैं कोड विकसित करता हूं, मैं अक्सर कक्षा के कुछ बिल्डिंग ब्लॉक का परीक्षण करना चाहता हूं, भले ही वे सामान्य रूप से निजी हों। यदि मेरे यूनिट परीक्षण परियोजना के अंदर हैं, तो मैं इसे पूरा करने के लिए "मित्र" का उपयोग कर सकता हूं और अभी भी सामान्य उपयोग के लिए कार्यों को निजी रख सकता हूं। लेकिन मैं अपने एनयूनीट परीक्षणों को अपनी अलग परियोजनाओं में ले जाऊंगा। मैं जिस प्रभाव को ढूंढ रहा हूं उसे मैं कैसे प्राप्त करूं?मैं वीबी .NET में एक अलग परियोजना से निजी कार्यों का परीक्षण कैसे करूं?
उत्तर
आप (आसानी से) परीक्षण निजी एक परीक्षण परियोजना से एक अलग परियोजना से तरीकों, लेकिन यह काफी आंतरिक तरीकों का परीक्षण करने के लिए आम है (VB में Friend
) InternalsVisibleToAttribute
का उपयोग नहीं कर सकते हैं। यह Friend
सदस्यों को किसी अन्य असेंबली के लिए सुलभ बनाता है।
स्पष्ट रूप से यह वीबी 9 में नया था हालांकि यह सी # 2 में उपलब्ध था ... बिल्कुल यकीन नहीं है, लेकिन this blog post from Bart de Smet एक त्वरित उदाहरण देता है।
ध्यान दें कि यदि आपकी उत्पादन असेंबली पर हस्ताक्षर किए गए हैं, तो आपकी टेस्ट असेंबली पर भी हस्ताक्षर करने की आवश्यकता होगी, और आपको InternalsVisibleToAttribute
तर्कों में सार्वजनिक कुंजी निर्दिष्ट करनी होगी। अधिक जानकारी के लिए this Stack Overflow answer देखें।
आप निजी तरीकों का आह्वान करने के लिए प्रतिबिंब का उपयोग कर सकते हैं। ऐसा करने के लिए वहां बहुत सारे नमूने हैं।
और यह वह है जिसने मुझे सबसे ज्यादा मदद की: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx – demoncodemonkey
: http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx
मूल बातें:
public static object RunStaticMethod(System.Type t, string strMethod,
object [] objParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
} //end of method
public static object RunInstanceMethod(System.Type t, string strMethod,
object objInstance, object [] aobjParams)
{
BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
objInstance, aobjParams, eFlags);
} //end of method
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object [] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("There is no method '" +
strMethod + "' for type '" + t.ToString() + "'.");
}
object objRet = m.Invoke(objInstance, aobjParams);
return objRet;
}
catch
{
throw;
}
} //end of method
- 1. एक निजी निर्देशिका में कार्यों का परीक्षण कैसे करें?
- 2. मैं .NET में निरंतर परीक्षण कैसे करूं?
- 3. .NET 4.0 कार्यों में निजी चर
- 4. मैं विधि ऑब्जेक्ट में विधियों का परीक्षण कैसे करूं?
- 5. ईयूनीट निजी कार्यों का परीक्षण करने में विफल रहता है
- 6. .NET इकाई परीक्षण परियोजना संगठन
- 7. मैं एक निजी क्षेत्र का नकल कैसे करूं?
- 8. मैं अपने ब्राउज़र टाइमज़ोन आश्रित एप्लिकेशन को फिर से अलग-अलग टाइमज़ोन का परीक्षण कैसे करूं?
- 9. मैं डीजेगो दृश्यों का परीक्षण कैसे करूं?
- 10. मैं वीबी 6 में एक खुली फ़ाइल कैसे कॉपी करूं?
- 11. मैं जावास्क्रिप्ट कार्यों का वारिस कैसे करूं?
- 12. मैं webservices का परीक्षण कैसे करूं?
- 13. मैं एलिसियम परियोजना का उपयोग कैसे करूं?
- 14. फिर एक अलग परियोजना में परीक्षण क्यों रखना है फ़ोल्डर?
- 15. मैं वीबी 10 में निजी सेट ऑटो-प्रॉपर्टी कैसे लिखूं?
- 16. परीक्षण परियोजना से परियोजना का मार्ग कैसे प्राप्त करें?
- 17. मैं एक इकाई परीक्षण परियोजना के संदर्भ के रूप में एक VSTO परियोजना कैसे जोड़ूं?
- 18. मैं डेटाबेस माइग्रेशन का परीक्षण कैसे करूं?
- 19. एक अलग डीएलएल परियोजना
- 20. उबंटू में मैं एक निजी गिट भंडार कैसे स्थापित करूं?
- 21. मैं रेल में फ़ाइल अपलोड करने का परीक्षण कैसे करूं?
- 22. एक guid का उपयोग कर परीक्षण ... मैं चर को एक ग्रिड में कैसे सेट करूं?
- 23. वीबी 6 एक .NET लाइब्रेरी
- 24. वीबी 6 में .NET असेंबली का संदर्भ
- 25. वीबी .NET बनाम वीबी 2010
- 26. मैं एंड्रॉइड पावरप्रोफाइल निजी एपीआई का उपयोग कैसे करूं?
- 27. मैं कोड-जनरेटर का परीक्षण कैसे करूं?
- 28. मैं जीडब्ल्यूटी विकास का परीक्षण कैसे करूं?
- 29. मैं डब्ल्यूसीएफ सेवा का परीक्षण कैसे करूं?
- 30. मैं PHP में यह टोकन कैसे उत्पन्न करूं? (.NET से)
कारण है कि यह VB9 में नया था के रूप में (यह ऊपर लिंक कोड परियोजना साइट से चिपकाया जाता है), यह था एक लागत/लाभ व्यापार बंद करो। वीबी के नामों को हल करने का एक बहुत ही अलग तरीका है और आंतरिक दृश्यमान बहुत अधिक नाम लुकअप को जटिल बनाता है। यह वीबी 8 के लिए बहुत महंगा था और इसलिए वीबी 9 में गिर गया। हम वास्तव में वीबी 10 में इस संदर्भ के लिए नाम संकल्प (cont) – JaredPar
(cont) खाते के आसपास और परिवर्तन कर रहे हैं। – JaredPar
इस उत्तर के लिए धन्यवाद –