使用RhinoMocks - 我可以获取被调用函数的参数吗?我的意思是;我可以从函数调用中获取一些未知参数吗?
我有一个模拟器,我期望在此调用一些函数。我知道其中一个参数,但另一个是未知的,因为它来自使用模拟并调用函数的类。更具体地说 - 在这种情况下 - 未知参数是lambda函数。这是一个回调函数,应该在函数执行完毕后调用。由于模拟阻止调用回调,我想获取它并自己调用它。
因此;我想检查函数是否被调用。我想确保一些论点是预期的论点。我希望得出未知的论据,然后对它们进行一些操作。
假设两个参数都是整数(为简单起见),我想做类似的事情:
int unknownInt;
_fakeSomething.AssertWasCalled(factory => factory.Foo(1, out unknownInt));
// then play around with unknownInt..
可以这样做吗?我看到有一个Arg.Out,但是不能让它发挥作用..
注意:更新了问题,因为它似乎具有误导性。
答案 0 :(得分:15)
Arg<string>.Matches(arg => you got the argument here...);
更新:
要在Foo
上第一次调用_fakeSomething
方法时获取第二个参数:
string someArg = null;
var args = _fakeSomething.GetArgumentsForCallsMadeOn(
x => x.Foo(0, 0),
x => x.IgnoreArguments()
);
var int = (int)args[0][1];
答案 1 :(得分:0)
不确定是否可以完成,但是这样的测试会导致测试不可靠,因为您不知道传入的实际参数。
如果可能,请测试显式数据。如果你f.eks传入null而不是真值,你的测试可能会因错误的原因而传递。
使用Arg.Is.Anything进行测试应该小心,当你真的不关心参数时,例如在AssertWasNotCalled中。