Bagi siapa saja yang ingin menjalankan metode pribadi tanpa semua fess dan kekacauan. Ini berfungsi dengan kerangka pengujian unit apa pun yang menggunakan Refleksi lama yang bagus.
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;
}
}
Kemudian dalam tes Anda yang sebenarnya, Anda dapat melakukan sesuatu seperti ini:
Assert.AreEqual(
ReflectionTools.InvokePrivate(
typeof(StaticClassOfMethod),
"PrivateMethod"),
"Expected Result");
Assert.AreEqual(
ReflectionTools.InvokePrivate(
new ClassOfMethod(),
"PrivateMethod"),
"Expected Result");
pre-historic
dalam hal tahun Internet, tetapi pengujian unit metode pribadi sekarang mudah dan lurus ke depan, dengan Visual Studio menghasilkan kelas accessor yang diperlukan ketika diperlukan dan pra-mengisi logika tes dengan potongan yang hampir sesuai dengan keinginan seseorang untuk tes fungsional sederhana. Lihat misalnya. msdn.microsoft.com/en-us/library/ms184807%28VS.90%29.aspx