【问题标题】:Internal static class contains private class. How to create object of private class for unit testing using microsoft fakes内部静态类包含私有类。如何使用 microsoft fakes 为单元测试创​​建私有类对象
【发布时间】:2016-09-25 15:01:38
【问题描述】:

我搜索了很多关于这个问题但没有得到任何与我正在寻找相同的问题,最后提出这个问题。

我正在使用 microsoft fakes 来测试下面的 C# 代码。

我陷入了一种情况,我有一个下面的课程要测试

 internal static class IntStaticClass
 {

     //some code

    private class PvtClass
    {
        public string Create(Obj1 o1, Obj2 o2)
        {

        //some code

        }
    }
}

现在我想测试创建方法。

但是 PrivateObject 或 PrivateType 无法找到 typeof(MyPrivateClass)

请帮助我如何创建 PvtClass 的对象并调用方法 create 进行测试。

提前致谢。

【问题讨论】:

    标签: c# unit-testing microsoft-fakes


    【解决方案1】:

    您可以通过Assembly.GetType() 方法获取对外部类的引用,然后可以通过Type.GetNestedTypes(BindingFlags.NonPublic) 访问内部类

    获取程序集引用最不痛苦的方法是typeof(该程序集中的某个公共类).Assembly

    【讨论】:

    • 非常感谢 Joshua 的快速帮助。现在就试试这个。
    【解决方案2】:

    非常感谢约书亚。终于解决了问题。干杯。

    我写了下面的代码来创建内部私有类的实例并执行它的方法。

                var type = typeof(IntStaticClass);
                var types = type.GetNestedTypes(BindingFlags.NonPublic);
                MethodInfo methodInfo = types[0].GetMethod("Create");
                object classInstance = System.Activator.CreateInstance(types[0], null);
                object[] parametersArray = new object[2] { new Obj1(), new Obj2() };
                var result = methodInfo.Invoke(classInstance, parametersArray);
    

    现在可以测试该方法。干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多