C# Visual Studio中的PrivateObject

C# Visual Studio中的PrivateObject,c#,.net-core,mstest,C#,.net Core,Mstest,我正在使用Visual Studio 2019,在MSTest测试项目(.NET Core)中,我试图使用PrivateObject测试受保护的方法 例如,我正在尝试做如下的事情 PrivateObject private = new PrivateObject(new Color()) 但是我得到了以下错误 找不到PrivateObject是否缺少using指令或程序集引用 我还包括 using Microsoft.VisualStudio.TestTools.UnitTesting; 我

我正在使用Visual Studio 2019,在MSTest测试项目(.NET Core)中,我试图使用
PrivateObject
测试受保护的方法

例如,我正在尝试做如下的事情

PrivateObject private = new PrivateObject(new Color())
但是我得到了以下错误

找不到PrivateObject是否缺少using指令或程序集引用

我还包括

using Microsoft.VisualStudio.TestTools.UnitTesting;

我认为它应该包括
PrivateObject

我认为
PrivateObject
在.Net核心中不存在。 您可以使用这些扩展来调用非公共成员

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()}");
        }
public static T CallNonPublicMethod(此对象为o,字符串为methodName,参数为object[]args)
{
var type=o.GetType();
var mi=type.GetMethod(methodName,System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
如果(mi!=null)
{
返回(T)mi.Invoke(o,args);
}
抛出新异常($“方法{methodName}在类型{type.ToString()}上不存在”);
}
public static T CallNonPublicProperty(此对象为o,字符串方法名)
{
var type=o.GetType();
var mi=type.GetProperty(methodName,System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
如果(mi!=null)
{
返回(T)mi.GetValue(o);
}
抛出新异常($“类型{type.ToString()}上不存在属性{methodName}”);
}
您可以这样使用它们:

var color= new Color();
var result= color.CallNonPublicMethod<YourReturnType>(YourMethodName, param1, param2, ... param n);
var color=new color();
var result=color.CallNonPublicMethod(YourMethodName,param1,param2,…param n);

我认为.Net核心中不存在
私有对象。
您可以使用这些扩展来调用非公共成员

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()}");
        }
public static T CallNonPublicMethod(此对象为o,字符串为methodName,参数为object[]args)
{
var type=o.GetType();
var mi=type.GetMethod(methodName,System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
如果(mi!=null)
{
返回(T)mi.Invoke(o,args);
}
抛出新异常($“方法{methodName}在类型{type.ToString()}上不存在”);
}
public static T CallNonPublicProperty(此对象为o,字符串方法名)
{
var type=o.GetType();
var mi=type.GetProperty(methodName,System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
如果(mi!=null)
{
返回(T)mi.GetValue(o);
}
抛出新异常($“类型{type.ToString()}上不存在属性{methodName}”);
}
您可以这样使用它们:

var color= new Color();
var result= color.CallNonPublicMethod<YourReturnType>(YourMethodName, param1, param2, ... param n);
var color=new color();
var result=color.CallNonPublicMethod(YourMethodName,param1,param2,…param n);

这是否回答了您的问题?还是这回答了你的问题?或者我尝试了var color=new color(),然后var result=color.CallNonPublicMethod(getSizes);但事实并非如此work@Golfer1145它怎么不起作用?请具体说明;“它不起作用”不会告诉Kristjan出了什么问题。你应该把“GetSizes”作为一个字符串。您是否有一个没有参数的有效GetSizes方法?让我们看看你得到了什么。编译错误,运行时异常?我尝试了var color=new color(),然后var result=color.CallNonPublicMethod(getSizes);但事实并非如此work@Golfer1145它怎么不起作用?请具体说明;“它不起作用”不会告诉Kristjan出了什么问题。你应该把“GetSizes”作为一个字符串。您是否有一个没有参数的有效GetSizes方法?让我们看看你得到了什么。编译错误,运行时异常?