4

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

例子:

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

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

2 回答 2

5

假设您正在向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();
}
于 2013-12-05T12:22:30.350 回答
1

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

例如,如果您有:

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);
于 2013-12-05T12:10:46.243 回答