Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

НТН

Ответ 2

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

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

_sut = new Bar(fooMock.Object);

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

_sut.Test();

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

fooMock.VerifyAll();

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

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