Đối với bất cứ ai muốn chạy các phương thức riêng tư mà không cần tất cả các fess và lộn xộn. Điều này hoạt động với bất kỳ khung thử nghiệm đơn vị nào sử dụng không có gì ngoài Reflection cũ tốt.
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;
}
}
Sau đó, trong các thử nghiệm thực tế của bạn, bạn có thể làm một cái gì đó như thế này:
Assert.AreEqual(
ReflectionTools.InvokePrivate(
typeof(StaticClassOfMethod),
"PrivateMethod"),
"Expected Result");
Assert.AreEqual(
ReflectionTools.InvokePrivate(
new ClassOfMethod(),
"PrivateMethod"),
"Expected Result");
pre-historic
về mặt Internet, nhưng việc kiểm tra đơn vị các phương thức riêng tư hiện dễ dàng và dễ dàng, với Visual Studio tạo ra các lớp truy cập cần thiết khi cần và điền trước logic kiểm tra với các đoạn mã gần với những gì người ta có thể mong muốn cho các thử nghiệm chức năng đơn giản. Xem ví dụ. msdn.microsoft.com/en-us/l