DelphiMocks:有没有办法让When子句匹配每个可能的输入?

时间:2016-01-22 18:13:37

标签: delphi delphi-mocks

我试图设置一个模拟函数,它将返回一个基于输入的值。访问我所知道的输入参数的唯一方法是通过WillExecute方法。但是,您必须指定When子句,并且When子句希望我按以下方式定义输入值以及方法:

aMock.Setup.WillExecute(function ...).When.myFunc(1);

我有点不得不说:只要调用myFunc(1),就调用匿名函数。我希望能够做同样的事情,但是在myFunc的每个可能参数上,在参数myFunc(概念上)中使用一种通配符标记:

aMock.Setup.WillExecute(function ...).When.myFunc(*);

这样的事情可能吗?基本上是When子句,它将匹配作为参数传递的任何值。

有人可能会想要指出WillReturnDefault值,但是方法无法访问调用的实际参数,因为WillExecute会这样做,所以我不能够除了一个恒定的值之外,设置任何东西。

感谢。

2 个答案:

答案 0 :(得分:0)

好的,我错过了WillExecute的重载版本会做到这一点的事实:

//Will exedute the func when called with the specified parameters
function WillExecute(const func : TExecuteFunc) : IWhen<T>;overload;

//will always execute the func no matter what parameters are specified.
procedure WillExecute(const AMethodName : string; const func : TExecuteFunc);overload;

这样我可以告诉mock在调用方法时执行传递的anon,无论其参数如何,同时仍然提供对它们的访问。正是我在寻找什么。结束问题。感谢。

答案 1 :(得分:0)

这也可以通过使用参数匹配来解决:

aMock.Setup.WillExecute(function ...).When.myFunc(It0.IsAny<Integer>);