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

本文关键字:打印 GetArgumentsForCallsMadeOne 失败 断言 RhinoMock 如果 | 更新日期: 2023-09-27 18:22:01

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

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

所以我可以看到对mock进行了哪些调用(这很有帮助,因为通常问题是用错误的参数调用mock)。

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

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

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

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

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