如何在 .net 标准测试项目中测试 PrivateObject?
How to test a PrivateObject in a .net standard test project?
我正在学习本教程,https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-mstest
但我没有可用的 PrivateObject 类型,所以我想知道是否可以使用 .net 标准 2.0 项目测试私有对象。
私有对象只能在 class 的主体内访问,因此为了测试它们,您必须执行以下操作之一:
- 创建私有对象public
或
- 实施 public 将与这些私有对象交互的方法
你总是可以使用反射
ClassToTest obj = new ClassToTest();
Type t = typeof(ClassToTest);
FieldInfo f = t.GetField("field", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
f.SetValue(obj, "Don't panic");
t.InvokeMember("PrintField",
BindingFlags.InvokeMethod | BindingFlags.NonPublic |
BindingFlags.Public | BindingFlags.Instance,
null, obj, null);
你应该为此编写一个帮助程序class,否则你的测试将包含很多相同的代码
P.S。代码示例来自 here
我正在学习本教程,https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-mstest
但我没有可用的 PrivateObject 类型,所以我想知道是否可以使用 .net 标准 2.0 项目测试私有对象。
私有对象只能在 class 的主体内访问,因此为了测试它们,您必须执行以下操作之一:
- 创建私有对象public 或
- 实施 public 将与这些私有对象交互的方法
你总是可以使用反射
ClassToTest obj = new ClassToTest();
Type t = typeof(ClassToTest);
FieldInfo f = t.GetField("field", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
f.SetValue(obj, "Don't panic");
t.InvokeMember("PrintField",
BindingFlags.InvokeMethod | BindingFlags.NonPublic |
BindingFlags.Public | BindingFlags.Instance,
null, obj, null);
你应该为此编写一个帮助程序class,否则你的测试将包含很多相同的代码
P.S。代码示例来自 here