Всем привет. В прошлой статье мы рассмотрели создание теста юнит-теста состояния. Теперь рассмотрим тест взаимодействия.
За основу возьмем предыдущий тест, но так как это тест взаимодействия, то нам не нужно волноваться за результат – переменную result и ее использование в Assert. Но нам нужно удостоверится, что вызывался метод HasGoodCreditHistory.
Для этой проверки используется следующая строка с использованием метода Verify, lambda-выражения и синтаксиса Moq для любой строки:
1 |
fakeGateway.Verify(x => x.HasGoodCreditHistory(It.IsAny<string>())); |
Тест имеет следующий вид:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[Test] public void ShouldAskGatewayForCreditCheck() { var fakeGateway = new Mock<ICreditCheckerGateway>(); var sut = new CreditCardApplicationScorer(fakeGateway.Object); var application = new CreditCardApplication { ApplicantAgeInYears = 30 }; sut.ScoreApplication(application); fakeGateway.Verify(x => x.HasGoodCreditHistory(It.IsAny<string>())); } |
Этот тест не есть полноценным, так как не используется переменная имени заемщика и реальная проверка. Исправим это:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Test] public void ShouldAskGatewayForCreditCheck() { var fakeGateway = new Mock<ICreditCheckerGateway>(); var sut = new CreditCardApplicationScorer(fakeGateway.Object); var application = new CreditCardApplication { ApplicantAgeInYears = 30, ApplicantName = "Jason" }; sut.ScoreApplication(application); fakeGateway.Verify(x => x.HasGoodCreditHistory("Jason")); } |
Чтобы сделать проверку взаимодействия при изменении обьектов, измененим имя заемщика, например “Jason2″, и запустим тест.
Как и ожидалось, – он фейлится.
Вернем имя обратно и в метод проверки внесем еще один параметр Times.Once() для задания количества вызовов метода.
1 |
fakeGateway.Verify(x => x.HasGoodCreditHistory("Jason"),Times.Once()); |
Для проверки запустим тест, чтобы убедится в его успешном выполнении.