我正在使用 Visual Studio 2019,并在 MSTest 测试项目(.NET Core)中尝试使用PrivateObject
测试受保护的方法。
例如,我正在尝试执行以下操作
PrivateObject private = new PrivateObject(new Color())
但我收到以下错误
找不到 PrivateObject 是否缺少 using 指令或程序集引用?
我还包括
using Microsoft.VisualStudio.TestTools.UnitTesting;
我认为其中会包括PrivateObject
.
I think PrivateObject
.Net Core 中不存在。
您可以使用这些扩展来调用非公共成员。
public static T CallNonPublicMethod<T>(this object o, string methodName, params object[] args)
{
var type = o.GetType();
var mi = type.GetMethod(methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (mi != null)
{
return (T)mi.Invoke(o, args);
}
throw new Exception($"Method {methodName} does not exist on type {type.ToString()}");
}
public static T CallNonPublicProperty<T>(this object o, string methodName)
{
var type = o.GetType();
var mi = type.GetProperty(methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
if (mi != null)
{
return (T)mi.GetValue(o);
}
throw new Exception($"Property {methodName} does not exist on type {type.ToString()}");
}
你可以像这样使用它们:
var color= new Color();
var result= color.CallNonPublicMethod<YourReturnType>(YourMethodName, param1, param2, ... param n);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)