内部静态类包含私有类。如何使用微软假货创建私有类对象进行单元测试

时间:2016-09-25 15:01:38

标签: c# unit-testing microsoft-fakes

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

我使用微软假货来测试下面的C#代码。

我遇到了以下类测试的情况

 internal static class IntStaticClass
 {

     //some code

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

        //some code

        }
    }
}

现在我想测试create方法。

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

请帮助我如何创建PvtClass的对象并调用create to test方法。

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

访问内部类

获得对程序集的引用的最不痛苦的方法是typeof(该程序集).Assembly中的一些公共类。

答案 1 :(得分: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);

现在可以测试方法了。欢呼声。