2

MockRepository でメソッドが呼び出されなかったことを主張する方法はありますか?

私が持っているとしましょう:

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

私はできることを知っています:

repo.AssertWasNotCalled(...);

しかし、それが使用されていないことを確認する方法はありますか? 毎回すべてのメソッドを実行する代わりに、レポが使用されていないかどうかを確認したいですか?

このリポジトリを使用していないことを確認したい場合があります。

4

3 に答える 3

3

スタブの代わりに StrictMock を使用します。

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

セットアップされていないメンバーを呼び出そうとすると、例外がスローされます。


ところで、Moqにも同じことが当てはまります:

var repoMock = new Mock<RealRepo>(MockBehavior.Strict);
于 2013-09-25T10:24:55.590 に答える
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();
    }

しかし、Sergey Berezovskiy の答えはもう少し単純に思えます。

于 2013-09-25T09:18:29.750 に答える