如何使用FakeItEasy框架测试是否已调用Func <t>?</t>

时间:2013-12-05 12:02:21

标签: c# func fakeiteasy

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

示例:

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

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

2 个答案:

答案 0 :(得分:4)

您可以这样做,假设您正在为正在测试的代码提供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();
}

答案 1 :(得分: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);