创建一个具有内部修饰符的类

时间:2012-02-13 15:25:09

标签: c# .net unit-testing

我正在尝试对一些使用库的代码进行单元测试,该库通过“内部”类修饰符在内部隐藏了依赖关系。

在设置测试期间,我希望能够创建内部类的实例。通常我会尝试类似的东西:

var type = typeof (FooBar);
var parameterlessCtor = (from c in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                        where c.GetParameters().Length == 0 select c).FirstOrDefault();

object instance;
if(parameterlessCtor != null)
{
    instance = parameterlessCtor.Invoke(null);
}

这个明显的问题是'typeof(FooBar)' - 我不能在内部类型上做typeof。

任何想法,如果我能绕过这个吗?

哦,我无法重建具有内部可见属性的程序集......

2 个答案:

答案 0 :(得分:3)

不,但您可以使用GetType

从其全名中检索该类型
var type = Type.GetType("YourNameSpace.Foobar, YourNameSpace, Version=x.Y.Z.K, Culture=neutral, PublicKeyToken=xyz");

答案 1 :(得分:0)

您可以使用反射来执行此操作。

        Type type = typeof (Class1).Assembly.GetType("Class2");
        object instance = Activator.CreateInstance(type);

其中Class1是与内部类型在同一程序集中的公共类,而Class2是您的内部类型。

不是最好的解决方案,你将不得不使用反射来调用方法,因为你无法投射,但它可以工作