1

假设我有一个使用 RhinoMock 的测试。我使用的是 AAA 方法,所以通常以 fooMock.AssertWasCalled(x=>x.Foo(bar))

如果断言失败,我通常会添加如下所示的行 fooMock.GetArgumentsForCallsMadeOn(x=>x.Foo(null)).PrintDump()

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

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

4

1 回答 1

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()扩展。

于 2013-07-15T09:39:36.080 回答