2

我在伪造我的班级时遇到问题:

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 函数

4

1 回答 1

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)

于 2012-08-22T09:35:25.820 回答