首页 > 解决方案 > Visual Studio 中的私有对象

问题描述

我正在使用 Visual Studio 2019 并在 MSTest 测试项目 (.NET Core) 中尝试使用它PrivateObject来测试受保护的方法。

例如,我正在尝试执行以下操作

PrivateObject private = new PrivateObject(new Color())

但我收到以下错误

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

我也包括

using Microsoft.VisualStudio.TestTools.UnitTesting;

我认为包括PrivateObject.

标签: c#.net-coremstest

解决方案


我认为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);

推荐阅读