【问题标题】:Testing private method of an abstract class using Reflection使用反射测试抽象类的私有方法
【发布时间】:2010-12-14 18:08:56
【问题描述】:

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

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

【问题讨论】:

    标签: c# reflection tdd


    【解决方案1】:

    你可以这样做,但这不是反射,可能对某人有帮助。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-07
          • 2011-12-10
          • 1970-01-01
          相关资源
          最近更新 更多