Когда-нибудь сталкивались с данным / Когда / Тогда?
- Учитывая контекст
- Когда я выполняю некоторые события
- Тогда должен произойти исход
Этот шаблон появляется в сценариях BDD, а также актуален для модульных тестов.
Если вы настраиваете контекст, вы собираетесь использовать информацию, которую предоставляет этот контекст. Например, если вы ищете что-то по Id, это контекст. Если он не существует, тест не будет запущен. В этом случае вы хотите использовать NiceMock или заглушку или что-то еще - способ запуска Moq по умолчанию.
Если вы хотите проверить результат, вы можете использовать Moq's verify. В этом случае вы хотите записать соответствующие взаимодействия. К счастью, это также способ запуска Moq по умолчанию. Он не будет жаловаться, если что-то случится, если вы не заинтересованы в этом тесте.
StrictMock предназначен для случаев, когда вы не хотите, чтобы неожиданные взаимодействия происходили. Это то, как раньше запускались фреймворки в старом стиле. Если вы делаете примеры в стиле BDD, вы, вероятно, не захотите этого. Он имеет тенденцию делать тесты более хрупкими и трудными для чтения, чем если бы вы разделяли интересующие вас аспекты поведения. Вы должны установить ожидания как для контекста, так и для результата, для всех результатов, которые будут иметь место, независимо от того, о том, представляют ли они интерес или нет.
Например, если вы тестируете контроллер и проверяете и ваш валидатор, и ваш репозиторий, и вы хотите проверить, что вы сохранили свой объект, со строгим макетом вы также должны убедиться, что вы проверили объект первым. Я предпочитаю видеть эти два аспекта поведения в отдельных примерах, потому что мне легче понять ценность и поведение контроллера.
За последние четыре года я не нашел ни одного примера, который требовал бы использования строгой насмешки - либо это был результат, который я хотел проверить (даже если я проверял число раз, когда он вызывался), либо контекст для который я могу сказать, правильно ли я отвечаю на предоставленную информацию. Итак, в ответ на ваш вопрос:
- нестрогая насмешка: обычно
- строгий издевательство: желательно никогда
NB. Я сильно склонен к BDD, поэтому жесткие TDD-устройства могут со мной не согласиться, и это будет правильным для их работы.