【问题标题】:How to test a PrivateObject in a .net standard test project?如何在 .net 标准测试项目中测试 PrivateObject?
【发布时间】:2017-06-21 10:40:29
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案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);
    

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

    附:代码示例来自here

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 2014-07-06
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多