Rhino Mocks,声称没有使用MockRepository(方法)?

时间:2013-09-25 08:46:11

标签: c# unit-testing rhino-mocks

有没有办法断言在MockRepository中没有调用任何方法?

说我有:

var repo = MockRepository.GenerateStub<RealRepo>();

我知道我能做到:

repo.AssertWasNotCalled(...);

但有没有办法检查它是否未被使用?每次我想检查是否没有使用回购时,而不是做所有的方法?

我有些情况下我想检查一下我不使用这个回购。

3 个答案:

答案 0 :(得分:3)

使用StrictMock而不是stub:

var repo = MockRepository.GenerateStrictMock<RealRepo>();

如果您尝试呼叫任何没有设置的成员,它将抛出异常。


对于Moq来说,BTW也是如此:

var repoMock = new Mock<RealRepo>(MockBehavior.Strict);

答案 1 :(得分:1)

您可以尝试将自己的扩展程序添加到Rhino Mocks中。像这样:

    public static void AssertNothingWasCalled<T>(this T mock)
    {
        var methodsToVerify = typeof (T)
            .GetMethods()
            .Where(m => !m.IsSpecialName);

        foreach (var method in methodsToVerify)
        {
            var arguments = BuildArguments(method);
            var action = new Action<T>(x => method.Invoke(x, arguments));
            mock.AssertWasNotCalled(action, y => y.IgnoreArguments());
        }
    }

    private static object[] BuildArguments(MethodInfo methodInfo)
    {
        return methodInfo
            .GetParameters()
            .Select(p => Arg<object>.Is.Anything)
            .ToArray();
    }

但是the answer by Sergey Berezovskiy似乎有点简单。

答案 2 :(得分:0)

也许最简单的方法是将null引用传递给调用类。如果它试图使用它,你的SUT应该抛出NullReferenceException。这可能是最简单的方法。

但是,如果SUT检查为null,那么这将不起作用。