किसी के लिए भी जो बिना किसी डर और गड़बड़ी के निजी तरीकों को चलाना चाहता है। यह किसी भी इकाई परीक्षण ढांचे के साथ काम करता है, लेकिन पुराने पुराने प्रतिबिंब के अलावा कुछ भी नहीं।
public class ReflectionTools
{
// If the class is non-static
public static Object InvokePrivate(Object objectUnderTest, string method, params object[] args)
{
Type t = objectUnderTest.GetType();
return t.InvokeMember(method,
BindingFlags.InvokeMethod |
BindingFlags.NonPublic |
BindingFlags.Instance |
BindingFlags.Static,
null,
objectUnderTest,
args);
}
// if the class is static
public static Object InvokePrivate(Type typeOfObjectUnderTest, string method, params object[] args)
{
MemberInfo[] members = typeOfObjectUnderTest.GetMembers(BindingFlags.NonPublic | BindingFlags.Static);
foreach(var member in members)
{
if (member.Name == method)
{
return typeOfObjectUnderTest.InvokeMember(method, BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod, null, typeOfObjectUnderTest, args);
}
}
return null;
}
}
फिर अपने वास्तविक परीक्षणों में, आप ऐसा कुछ कर सकते हैं:
Assert.AreEqual(
ReflectionTools.InvokePrivate(
typeof(StaticClassOfMethod),
"PrivateMethod"),
"Expected Result");
Assert.AreEqual(
ReflectionTools.InvokePrivate(
new ClassOfMethod(),
"PrivateMethod"),
"Expected Result");
pre-historic
इंटरनेट के वर्षों में, लेकिन निजी तरीकों की इकाई परीक्षण अब आसान और सीधे दोनों है, विजुअल स्टूडियो आवश्यक होने पर आवश्यक सहायक कक्षाओं का उत्पादन करता है और स्निपेट्स के साथ परीक्षण तर्क को पूर्व-भरना सरल कार्य के लिए किसी की इच्छा के करीब हो सकता है। उदाहरण के लिए देखें। msdn.microsoft.com/en-us/library/ms184807%28VS.90%29.aspx