我正在尝试对一些使用库的代码进行单元测试,该库通过“内部”类修饰符在内部隐藏了依赖关系。
在设置测试期间,我希望能够创建内部类的实例。通常我会尝试类似的东西:
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。
任何想法,如果我能绕过这个吗?
哦,我无法重建具有内部可见属性的程序集......
答案 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是您的内部类型。
不是最好的解决方案,你将不得不使用反射来调用方法,因为你无法投射,但它可以工作