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

时间:2011-08-31 14:29:00

标签: c# unit-testing mocking

我有以下代码:

class MyBase
{
    public virtual void foo()
    { ... }
}

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

如何在不执行base.foo()方法的情况下测试MyDerived Class中的方法foo?

4 个答案:

答案 0 :(得分:12)

基本上,你不能。分别测试基类方法,以便您对此有信心,然后可以依赖基类行为测试派生类。

(这是另一种情况,其中组合提供了比继承更多的控制 - 如果你的派生类组成基类,你可以使用模拟或其他代替。当然,它不总是合适的,但是...)

答案 1 :(得分:2)

如何重构MyDerived以获得方法DoPreFoo()和DoPostFoo()。这样就可以重写foo来调用这些函数,你可以将它们用于单元测试。然而,这感觉有点难看。我觉得如果功能需要单独测试,MyDervied需要聚合MyBase而不是派生它。

答案 2 :(得分:1)

简短的回答是:你做不到。因为你不能“嘲笑”这种依赖。

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

答案 3 :(得分:1)

如果您不需要在测试中执行基本方法,那么您的设计就会出现问题。