【问题标题】:How to test whether a Func<T> has been called using the FakeItEasy framework?如何测试是否使用 FakeItEasy 框架调用了 Func<T>?
【发布时间】:2013-12-05 20:22:30
【问题描述】:

如何使用 FakeItEasy 框架检查 Func 是否被调用?

例子:

Func<bool> myFunc = () => true;

// Unfortunately this fails:
A.CallTo(myFunc.Invoke()).MustHaveHappened();

【问题讨论】:

  • 如果 FakeItEasy 与其他模拟框架类似,那么您只能确定是否调用了接口上的属性/方法或抽象类上的虚拟方法,因为您必须模拟此对象。您不能只调用一个随机委托并检查它是否被调用。

标签: c# func fakeiteasy


【解决方案1】:

假设您将Func 提供给被测代码,您可以执行此操作。您只需像使用任何其他类型一样使用它制作 Fake
它看起来像这样。

public class Foo {
  public bool Bar(Func<bool> fn) {
    return fn();
  }
}

[Test]
public void Should_call_fn() {
  var fn = A.Fake<Func<bool>>();

  (new Foo()).Bar(fn);

  A.CallTo(() => fn.Invoke()).MustHaveHappened();
}

【讨论】:

    【解决方案2】:

    我不认为你能做到。您只能确定是否调用了接口上的属性/方法或抽象类上的虚拟方法,因为您必须模拟此对象并拦截对该方法的调用。您不能只调用一个随机委托并检查它是否被调用。

    例如,如果您有:

    interface ISomething
    {
        void SomeMethod();
    }
    

    那么你可以这样做:

    var fake = A.Fake<IContactSubmitter>();
    
    // code which passes fake as dependency to something so SomeMethod will be caled...
    
    A.CallTo(() => fake.SomeMethod().MustHaveHappened(Repeated.Once.Exactly);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2014-04-22
      • 2021-01-31
      • 2021-09-06
      • 2021-01-04
      • 1970-01-01
      相关资源
      最近更新 更多