如果断言在RhinoMock中失败,则打印GetArgumentsForCallsMadeOne

时间:2013-07-12 09:53:48

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

假设我使用RhinoMock进行测试。我正在使用AAA aproach,所以它通常以 fooMock.AssertWasCalled(x=>x.Foo(bar))

如果断言失败,我通常会添加一行看起来像这样 fooMock.GetArgumentsForCallsMadeOn(x=>x.Foo(null)).PrintDump()

所以我可以看到在mock上调用了什么(它有帮助,因为通常问题是mock被错误的参数调用)。

有什么方法可以自动化这个过程吗?那么,如果断言失败,告诉RhinoMock打印调用是否在mock的方法上进行?

1 个答案:

答案 0 :(得分:0)

似乎没有内置机制来为失败的断言转储参数。

我建议使用如下扩展方法:

public static void AssertWasCalledAndDump<T>(this T self, Action<T> action)
{
    try
    {
        self.AssertWasCalled(action);
    }
    catch (Rhino.Mocks.Exceptions.ExpectationViolationException)
    {
        self
            .GetArgumentsForCallsMadeOn(action, options => options.IgnoreArguments())
            .PrintDump();
        throw;
    }
}

然后在代码中你可以写:

fooMock.AssertWasCalledAndDump(x=>x.Foo(bar));

<强> PS
我假设您已经实现了PrintDump()扩展名。

相关问题