Проверить метод, вызванный со списком параметров, один раз каждый? - PullRequest
1 голос
/ 14 марта 2019

У меня есть тест, в котором у меня есть набор параметров, и я хотел бы убедиться, что метод был вызван и каждый параметр был указан ровно один раз. Я могу сделать это:

var paramList = new List<string> { "one", "two", "three", "four" };
paramList.ForEach(x => MyMock.Verify(y => y.DoSomething(x), Times.Once));

Но мне интересно, предлагает ли Мок что-то, что я могу сделать всего одним звонком Verify.

1 Ответ

1 голос
/ 14 марта 2019

Я не думаю, что moq предлагает это, если я не ошибаюсь.Проблема в том, что даже если вы правильно настроили Verifiable для использования Verify или если вы хотите использовать VerifyAll, вы не можете указать ограничение Times.


Подтвердить

paramList.ForEach(s => mock.Setup(m => m.DoSomething(s)).Verifiable());

mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");

mock.Verify(); //Cannot specify Times

VerifyAll

paramList.ForEach(s => mock.Setup(m => m.DoSomething(s)));

mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");

mock.VerifyAll(); //Cannot specify Times

Хотя я не вижу проблем с вашим подходом, я просто хочу добавить еще одну опцию.Вы можете избежать Verify, используя функцию Capture.In, что-то вроде этого:

//Arrange
var invocation = new List<string>();
mock.Setup(m => m.DoSomething(Capture.In(invocation)));

//Act
mock.Object.DoSomething("one");
mock.Object.DoSomething("two");
mock.Object.DoSomething("three");
mock.Object.DoSomething("four");

//Assert
CollectionAssert.AreEquivalent(paramList, invocation);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...