c# - Visual Studio 中的私有对象
问题描述
我正在使用 Visual Studio 2019 并在 MSTest 测试项目 (.NET Core) 中尝试使用它PrivateObject
来测试受保护的方法。
例如,我正在尝试执行以下操作
PrivateObject private = new PrivateObject(new Color())
但我收到以下错误
找不到 PrivateObject 您是否缺少 using 指令或程序集引用?
我也包括
using Microsoft.VisualStudio.TestTools.UnitTesting;
我认为包括PrivateObject
.
解决方案
我认为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);
推荐阅读
- python - 如何使用熊猫偏移数据
- go - 如何在 grpc-gateway 中设置超时?
- javascript - Webpack 在构建后传递环境变量
- json - 使用来自先前调用的 Postman 响应变量进行 POST 调用
- javascript - 在 ng build 之后隐藏 Angular 服务不被捆绑在主 js 文件中
- javascript - 如何从另一个 React 应用打开一个 React 应用
- druid - Druid 内存消耗过多
- python - 按前 n 行对二维数组进行排序
- jenkins - 测试失败时 Squish Jenkins 插件返回 0
- django - 本身使用序列化程序 Django