2009-11-09 43 views
1

如何使用反射(使用C#)测试抽象类的私有方法?我特别感兴趣的是修改this thread中的代码。使用反射测试抽象类的私有方法

我知道围绕首先测试私人代码的原则进行的讨论(一般不应该这样做)。由于各种原因,我已经决定为我的情况这样做,所以我们不要重复那些讨论。其他SO线程(如Q#1583363和1506427)详细讨论它们。 谢谢。

+0

感谢您的回复。 – 2009-11-11 15:51:21

回答

5

按定义,抽象类不能实例化,所以你不能直接测试它。你可以使用其中一个模拟框架(如TypeMock),否则你需要创建一个继承自抽象类的具体类,并用它来测试。

1

如果你使用VS2008那么它就像右单击您的私有方法,并选择创建单元测试VS将创建一个YourAbstractClass_Accessor类,将让你看到和运行私有方法

注意:没有额外的嘲弄必要的框架

0

你可以做到这一点。 ,但这并不是反映,可能对某人有帮助。

var concreteClass = new concreteClass(); 
var po = new PrivateObject(concreteClass, new PrivateType(typeof(AbstractClass))); 
Object[] args = new object[] {...}; 
po.Invoke("PrivateMethod", args);