RhinoMocks - 获取被调用函数的参数

时间:2010-01-13 12:02:15

标签: c# unit-testing mocking rhino-mocks

使用RhinoMocks - 我可以获取被调用函数的参数吗?我的意思是;我可以从函数调用中获取一些未知参数吗?

我有一个模拟器,我期望在此调用一些函数。我知道其中一个参数,但另一个是未知的,因为它来自使用模拟并调用函数的类。更具体地说 - 在这种情况下 - 未知参数是lambda函数。这是一个回调函数,应该在函数执行完毕后调用。由于模拟阻止调用回调,我想获取它并自己调用它。

因此;我想检查函数是否被调用。我想确保一些论点是预期的论点。我希望得出未知的论据,然后对它们进行一些操作。

假设两个参数都是整数(为简单起见),我想做类似的事情:

int unknownInt; 
_fakeSomething.AssertWasCalled(factory => factory.Foo(1, out unknownInt));
// then play around with unknownInt.. 

可以这样做吗?我看到有一个Arg.Out,但是不能让它发挥作用..

注意:更新了问题,因为它似乎具有误导性。

2 个答案:

答案 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中。