如何在.net标准测试项目中测试私有对象?

时间:2017-06-21 10:40:29

标签: c# unit-testing mstest .net-standard

我正在关注本教程https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-with-mstest

但我没有类型的PrivateObject可用,所以我想知道是否可以使用.net标准2.0项目测试私有对象。

2 个答案:

答案 0 :(得分:1)

您始终可以使用反射

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);

你应该为此编写一个帮助类,否则你的测试将包含许多相同的代码

P.S。代码示例来自here

答案 1 :(得分:-1)

私有对象只能在类的主体内访问,因此为了测试它们,您必须执行以下操作之一:

  1. 将私有对象公开 或
  2. 实现将与这些私有对象交互的公共方法