【发布时间】:2013-02-07 18:35:13
【问题描述】:
您将如何伪造以下内容:
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);
}
}
即假货需要充当通过,但我还需要能够验证它是否已被使用。
最好的方法是什么?
[请不要担心这个人为的例子......幕后发生了很多事情,但我已经将其简化为上面的例子。]
【问题讨论】:
-
您要验证它是使用不超过一次、至少使用一次还是仅使用一次?如果不满足这个条件应该怎么办?该接口是否应该具有
numInvocations属性?您可以很容易地验证它不会被更多调用一次,但要知道它是否未被调用……您需要一种方法来提供反馈。 -
不涉及泛型,我可以用 var fake = A.Fake
(); A.CallTo(()==> fake.SomeMethod(A ._)) .ReturnsLazily(x=>x.GetArgument (0)); .... A.CallTo(fake).MustHaveHappened(Repeated.Exactly.Once);我不知道如何使用 Func 泛型在那里做同样的事情。我已经尝试创建接口的 Dummy 实现,并且可以通过,但由于这是具体的,FakeItEasy 无法验证它是否被使用。 -
因此,鉴于您需要确保它恰好发生在您希望该方法返回一个具有两个属性的类时,
NumInvokations和这个函数。将函数传递到其他地方,然后确定NumInvokations是否等于 1。 -
所以你的意思是一个虚拟实现是:class Dummy : IBlah { public int Invocations; public Func
ApplyFilter (Func handler) { Invocations++;返回处理程序; } } 问题是这个特殊的东西将嵌套在另一个假货中。我希望 FakeItEasy 能够在无需手工制作的情况下进行模拟。
标签: c# fakeiteasy