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


При работе с носорогом.Издевается с макетом предмета в руке:

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

Спасибо

2 5

2 ответа:

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

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

EDIT: ответ на комментарий

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

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

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

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

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

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