我有一个类似于以下的课程
class ObjectCaller
{
public void Process (String NameSpace) {
Type t = Type.GetType(NameSpace + ".Main");
if (t != null)
{
if (t.IsSubclassOf(typeof(Window)))
{
Object obj = Activator.CreateInstance(t);
}
else {
throw new NotAbstractedException();
}
}
else {
throw new MainNotFoundException();
}
}
}
将一个namespece传递给类的Render()
方法,并且传递的命名空间应该有一个类.Main
,并且该类应该从Window
类中抽象出来。哪个工作正常。但是我无法进行单元测试,所以如果类Main
存在但它不是Window
的抽象类,它应该抛出异常。
[TestMethod()]
[ExpectedException(typeof(NotAbstractedException))]
public void MainNotAbstractedTest() {
ObjectCaller oc = new ObjectCaller();
oc.Process("name.space.of.class");
}
我尝试将 MOQ 用于MOCK System.Type
类IsSubClassOf
方法,并且通过搜索发现它不可能是MOCK静态类。而且我也不想仅为了UnitTesting的目的而改变ObjectCaller
,是否有任何可能的方法使方法抛出异常NotAbstractedException
而不更改我动态加载的类或没有改变ObjectCaller
?
答案 0 :(得分:0)
只需通过传递一个命名空间来测试它,该命名空间包含一个名为Main
的类,该类不是从Window
派生的。
现在你可能会发现这很棘手,因为如果Type.GetType(string)
传递了一个非汇编限定名的值,它只会查看mscorlib
和调用程序集 - 在你的情况下是生产代码程序集。所以你的选择是:
Type.GetType
的调用,但添加单元测试以确保您没有任何名为Main
的类< em>不是派生自Window
。此时,您可以摆脱IsSubclass
测试