Какова цель VerifyAll () в Moq? - PullRequest
       5

Какова цель VerifyAll () в Moq?

41 голосов
/ 15 сентября 2010

Я прочитал вопрос на Какова цель Verifiable () в Moq? и у меня есть этот вопрос в моей голове.Нужна ваша помощь, чтобы объяснить это.

Ответы [ 2 ]

45 голосов
/ 15 сентября 2010

VerifyAll() для проверки того, что все ожидания оправдались. Предположим, у вас есть:

myMock.Setup(m => m.DoSomething()).Returns(1);
mySut.Do();
myMock.VerifyAll(); // Fail if DoSomething was not called

НТН

8 голосов
/ 21 марта 2019

Я постараюсь завершить ответ @ ema, возможно, он даст больше информации читателям. Представьте, что у вас есть смоделированный объект, который зависит от вашего sut . Допустим, у него есть два метода, и вы хотите настроить их, чтобы не получать никаких исключений или создавать различные сценарии для вашего sut :

var fooMock = new Mock<Foo>();
fooMock.Setup(f => f.Eat()).Returns("string");
fooMock.Setup(f => f.Bark()).Returns(10);

_sut = new Bar(fooMock.Object);

Итак, это был шаг . Теперь вы хотите запустить какой-то метод, который хотите протестировать (теперь вы act ):

_sut.Test();

Теперь вы будете утверждать с VerifyAll():

fooMock.VerifyAll();

Что вы здесь будете тестировать? Вы проверите, были ли ваши setup методы названы . В этом случае, если либо Foo.Eat() or Foo.Bark() не было вызвано, вы получите исключение, и тест не пройден. Так что, на самом деле, вы смешиваете аранжируете и утверждаете шаги. Кроме того, вы не можете проверить, сколько раз он был вызван, что вы можете сделать с .Verify (представьте, что у вас есть некоторый параметр Param со свойством Name в вашей функции Eat()):

fooMock.Verify(f => f.Eat(It.Is<Param>(p => p.Name == "name")), Times.Once);
...