【发布时间】:2010-12-14 18:08:56
【问题描述】:
如何使用反射(使用 C#)测试抽象类的私有方法?我对修改this thread 中的代码特别感兴趣。
我知道首先围绕测试私有代码原则的讨论(一般不应该!!)。由于各种原因,我已经决定针对我的情况这样做,所以我们不再重复这些讨论。其他 SO 线程(如 Q# 1583363 和 1506427)详细讨论了它们。 谢谢。
【问题讨论】:
标签: c# reflection tdd
如何使用反射(使用 C#)测试抽象类的私有方法?我对修改this thread 中的代码特别感兴趣。
我知道首先围绕测试私有代码原则的讨论(一般不应该!!)。由于各种原因,我已经决定针对我的情况这样做,所以我们不再重复这些讨论。其他 SO 线程(如 Q# 1583363 和 1506427)详细讨论了它们。 谢谢。
【问题讨论】:
标签: c# reflection tdd
你可以这样做,但这不是反射,可能对某人有帮助。
var concreteClass = new concreteClass();
var po = new PrivateObject(concreteClass, new PrivateType(typeof(AbstractClass)));
Object[] args = new object[] {...};
po.Invoke("PrivateMethod", args);
【讨论】:
如果您使用的是 VS2008,那么只需右键单击您的私有方法并选择创建单元测试即可。 VS 将创建一个 YourAbstractClass_Accessor 类,它允许您查看和运行该私有方法。
注意:不需要额外的模拟框架。
【讨论】:
根据定义,抽象类不能实例化,所以不能直接测试。您可以使用其中一种模拟框架(例如 TypeMock。否则,您需要创建一个继承自抽象类的具体类,并将其用于测试。
【讨论】: