Проверьте, сколько раз вызывается защищенный метод с использованием Moq - PullRequest
13 голосов
/ 16 сентября 2010

В своих юнит-тестах я издеваюсь над защищенным методом, используя Moq, и хотел бы утверждать, что он вызывается определенное количество раз. Этот вопрос описывает нечто подобное для более ранней версии Moq:

//expect that ChildMethod1() will be called once. (it's protected)
testBaseMock.Protected().Expect("ChildMethod1")
  .AtMostOnce()
  .Verifiable();

...
testBase.Verify();

, но это больше не работает;с тех пор синтаксис изменился, и я не могу найти новый эквивалент, используя Moq 4.x:

testBaseMock.Protected().Setup("ChildMethod1")
  // no AtMostOnce() or related method anymore
  .Verifiable();

...
testBase.Verify();

Ответы [ 2 ]

24 голосов
/ 16 сентября 2010

В пространстве имен Moq.Protected имеется интерфейс IProtectedMock , в котором есть метод Verify, принимающий в качестве параметра Times.

Edit Это доступно по крайней мере с Moq 4.0.10827.Пример синтаксиса:

testBaseMock.Protected().Setup("ChildMethod1");

...
testBaseMock.Protected().Verify("ChildMethod1", Times.Once());
9 голосов
/ 19 января 2017

Чтобы дополнить ответ Огаты, мы также можем проверить защищенный метод, который принимает аргументы :

testBaseMock.Protected().Setup(
    "ChildMethod1",
    ItExpr.IsAny<string>(),
    ItExpr.IsAny<string>());

testBaseMock.Protected().Verify(
    "ChildMethod1", 
    Times.Once(),
    ItExpr.IsAny<string>()
    ItExpr.IsAny<string>());

Например, это подтвердит ChildMethod1(string x, string y).

Смотри также: http://www.nudoq.org/#!/Packages/Moq.Testeroids/Moq/IProtectedMock(TMock)/M/Verify

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...