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

C# 如何为在基本对象中调用基本方法的方法编写单元测试,c#,unit-testing,mocking,C#,Unit Testing,Mocking,我有以下代码: class MyBase { public virtual void foo() { ... } } class MyDerived : MyBase { public override void foo() { ... base.foo(); ... } } 如果不执行base.foo()方法,我如何在MyDerivated类中测试方法foo?基本上你不能。单独测试基类方法,以便对此有信心,然后可以

我有以下代码:

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

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

如果不执行base.foo()方法,我如何在MyDerivated类中测试方法foo?

基本上你不能。单独测试基类方法,以便对此有信心,然后可以根据基类行为测试派生类


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

如何重构MyDerivated,使其具有doprefo()和DoPostFoo()方法。通过这种方式,可以重写foo来调用这些函数,并且可以将它们用于单元测试。不过这感觉有点难看。我觉得MyDervied需要聚合MyBase,而不是从中派生出来,如果功能需要单独测试的话。

简短的回答是:你不能。因为你不能“模仿”这个依赖


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

如果您不需要在测试中执行基本方法,那么您的设计中有一些错误

为什么不执行基本方法呢?