5

您将如何伪造以下内容:

public interface IBlah
{
    Func<T, bool> ApplyFilter<T>(Func<T, bool> predicate) where T:IMessage;
}

我想要的是假货只是简单地返回它的论点而不做任何改变。但是,我想验证该假货是否只被调用过一次。下面给出了一个用例:

  public class Something
  {

     public Something(IBlah blah) { _blah = blah; }

     public bool DoSomething(SomeValue m, Func<SomeValue, bool> predicate)
     {
         Func<SomeValue, bool> handler = _blah.ApplyFilter(predicate);
         return handler(m);
     }
  }

即假货需要充当通过,但我还需要能够验证它已被使用。

解决这个问题的最佳方法是什么?

[请不要担心人为的例子......幕后发生了很多事情,但我已将其简化为上面的例子。]

4

1 回答 1

2

这会解决你的问题吗?它将通过谓词并验证 ApplyFilter 是否被调用了一次

    [Fact]
    public void TestFeature()
    {
        var fake = A.Fake<IBlah>();
        A.CallTo(() => fake.ApplyFilter(A<Func<int, bool>>.Ignored)).ReturnsLazily(x =>
            {
                return x.GetArgument<Func<int, bool>>("predicate");
            });
        var something = new Something(fake);
        var result = something.DoSomething(1, x => x > 1);

        Assert.False(result);
        A.CallTo(() => fake.ApplyFilter(A<Func<int, bool>>.Ignored)).MustHaveHappened(Repeated.Exactly.Once);
    }
于 2013-02-08T20:58:53.993 回答