【问题标题】:C# FakeItEasy fake method that have been overridedC# FakeItEasy 已被覆盖的假方法
【发布时间】:2012-08-22 09:19:22
【问题描述】:

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

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

【问题讨论】:

  • 在这里使用 insted of inheretence 的封装可能会更好。
  • 问题是“方法”函数被A类接口中的另一个公共函数调用,所以我不能改变它的签名

标签: c# mocking fakeiteasy


【解决方案1】:

你可以用辅助类+一个辅助方法来做到这一点,但我真的不喜欢这个解决方案:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 2010-11-29
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多