已被覆盖的C#FakeItEasy假方法

时间:2012-08-22 09:19:23

标签: c# mocking fakeiteasy

我的课堂上有问题:

A类有一个方法:

protected virtual int method(int argument)
{
    implementation
    return int;
}

B类扩展了A类并重写了该方法:

protected override int method(int argument)
{
      int result = base.method(argument);
      implementation
      return result + 1;
}

我需要模拟B类并测试method函数。问题是我需要避免调用base.method(argument)函数。我只需要测试我的方法实现,并模拟该函数返回一个int。

我怎样才能用FakeItEasy做到这一点?还是其他嘲弄框架?

更新

问题解决:
制作功能:

int MethodCaller(int argument)
{
    base.method(argument);
}

并在我的B类“方法”函数中执行它。比模拟MethodCaller函数

1 个答案:

答案 0 :(得分:0)

您可以使用辅助类+一个辅助方法,但我真的不喜欢这个解决方案:

public class A
{
    protected virtual int method(int argument)
    {
        return argument;
    }

    public int result(int argument)
    {
      return method(argument);
    }
}

public class B : A
{
    protected override int method(int argument)
    {
        return baseMetod(0) + 1;
    }

    protected virtual int baseMetod(int argument)
    {
      return base.method(argument);
    }
}

public class C : B
{
    protected override int baseMetod(int argument)
    {
      return 5;
    }
}

所以在测试中你可以拨打new C().Result(10)