如何为调用基对象中的基方法的方法编写单元测试?

本文关键字:方法 单元测试 调用 对象 | 更新日期: 2023-09-27 18:07:13

我有以下代码:

class MyBase
{
    public virtual void foo()
    { ... }
}
class MyDerived : MyBase
{
   public override void foo()
   {
       ...
       base.foo();
       ...
   }
}

如何在MyDerived Class中测试方法foo而不执行base.foo()方法?

如何为调用基对象中的基方法的方法编写单元测试?

基本上不能。分别测试基类方法,这样你就对它有信心了,然后你就可以根据基类的行为测试派生类了。

(这是组合比继承提供更多控制的另一种情况—如果派生类组合了基类,则可以使用mock或其他方法代替。当然,这并不总是合适的,但是…)

如何重构MyDerived方法DoPreFoo()和DoPostFoo()。通过这种方式,foo可以被重写来调用这些函数,并且可以在单元测试中使用它们。然而,这感觉有点难看。我有一种感觉,如果功能需要单独测试,MyDervied需要聚合MyBase,而不是从中派生。

简短的回答是:你不能。因为你不能"mock away"这个依赖。

也许TypeMock Isolator有一些神奇的配置文件API技巧可以帮助这里,但我不确定。

如果您不需要在测试中执行您的基本方法,那么您的设计中一定有问题。