使用Reflection测试抽象类的私有方法

时间:2009-11-09 19:10:45

标签: c# reflection tdd

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

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

3 个答案:

答案 0 :(得分:5)

根据定义,抽象类无法实例化,因此无法直接测试它。您可以使用其中一个模拟框架(如TypeMock。否则,您需要创建一个继承自抽象类的具体类,并将其用于测试。

答案 1 :(得分:1)

如果您使用VS2008,那么只需右键单击您的私有方法并选择创建单元测试即可。 VS将创建一个YourAbstractClass_Accessor类,允许您查看和运行该私有方法。

注意:无需额外的模拟框架。

答案 2 :(得分:1)

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

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