Как я могу пройти модульный тест сразу после вызова ожидаемого метода для фиктивного объекта? - PullRequest
5 голосов
/ 25 октября 2011

При работе с Rhino.Mocks с макетом объекта в руке:

Есть ли способ пройти модульное тестирование после вызова ожидаемого метода без выполнения строк после вызова этого ожидаемого метода?

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Вы можете использовать AssertWasCalled() в Rhino.Mocks

Ваше ожидание, что тест должен прекратиться, если метод вызывается и не должен запускать следующие строки, означает, что вы написали тест неправильно. Возьмите assert (Nunit или иное) в качестве последней строки теста и разбейте тест. Вы, вероятно, тестируете две вещи, и это не модульное тестирование. В тестах такого ветвления нет. Все строки в тестах должны быть выполнены. И в идеале каждый тест должен иметь только одно утверждение.

С ожидаемым типом потока вы теряете обратную связь, полученную при тестировании, также и в случае неудачи. Вы не знаете, просто посмотрев на название теста, что не удалось.

2 голосов
/ 25 октября 2011

Начиная с RhinoMocks 3.5 вы можете использовать хороший AssertWasCalled()

this.Service.BuldMessage("messageId");
this.Service.AssertWasCalled(x => x.GenerateMessage("messageId"), messageId));

РЕДАКТИРОВАТЬ: Ответ на комментарий

RhinoMock не отвечает за изменение потока выполнения теста, поэтому вы должны использовать NUnit asserts, Assert.Pass () метод позволяет вам немедленно завершить тест, записав его как успешный:

if (this.Service.AssertWasCalled(...)))
{
   Assert.Pass("well done");
}

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

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