Почему мне нужна платформа насмешки для моего unittests?

38
задан Jessica Ward 26 April 2019 в 14:13
поделиться

9 ответов

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

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

32
ответ дан Art Doler 27 November 2019 в 03:40
поделиться

Вы на самом деле определили один из ключевых пунктов ложной платформы в Вашем вопросе. То, что Вы кодируете насмешки сами, не является чем-то, в чем разработчик должен быть обеспокоен. Платформы насмешки дают Вам реализации интерфейсов программно, плюс они функциональны (на основе Вашей установки насмешки).

, Что Вы делаете при тестировании ICustomerDAO, например, и Вы хотите протестировать некоторый метод 14 раз каждый с различными результатами? Реализовать 14 различных классов вручную? Я сомневаюсь, что любой хотел бы сделать это.

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

Они - большой инструмент поблочного тестирования.

12
ответ дан glenneroo 27 November 2019 в 03:40
поделиться

Предыдущие вопросы, которые могут помочь:
, Что такое насмешка и когда необходимо использовать ее?
Mockist по сравнению с классическим TDD

я нахожу, что использование платформы насмешки позволяет мне генерировать тесты намного быстрее и с лучшей проверкой, которая, что я ожидаю происходить в тесте на самом деле, happengin. Я имею в прошлых реализованных тупиках или фальшивках сам. Я нашел, что должен был генерировать тупики, характерные для теста, который я хотел, и это заняло много времени. Я могу создать тот же тест намного быстрее с помощью платформы насмешки. Хорошие поддерживают поколение фальшивок, тупиков или насмешек с простым синтаксисом.

Это требует времени для приобретения навыка его, я избежал его некоторое время, но теперь не попытаюсь работать без платформы насмешки по причинам @Chamelaeon состояния.

8
ответ дан Community 27 November 2019 в 03:40
поделиться

у Roy Osherove был опрос о Ложных Платформах и вниз в разделе комментария, существует обсуждение (хотя кратко) о том, нужна ли каждому Ложная Платформа или нет.

я лично вручную делал точно, как Вы заявили, и это работало достаточно хорошо, но это главным образом было вне привычки, а не тесно сохраненного мнения о ложных платформах в целом.

4
ответ дан itsmatt 27 November 2019 в 03:40
поделиться

Хорошо я, конечно, не думаю, что Вам НУЖНА платформа насмешки. Это - платформа как любой другой, и это в конечном счете разработано, чтобы сэкономить Вам некоторое время и усилие. Вы можете также сделать вещи как структуры общих данных самокрутки как стеки и очереди, но обычно не являетесь им легче просто использовать тех встроенных в библиотеки классов, которые поставлются с компилятором/IDE Вашего предпочтительного языка?

я уверен, что существуют другие неопровержимые доводы использования платформ насмешки, хотя я предоставил бы право TDD и гуру поблочного тестирования отвечать.

3
ответ дан Jesse Taber 27 November 2019 в 03:40
поделиться

По той же причине Вы не попытались бы записать модульные тесты без NUnit. Платформа насмешки поможет Вам в проверке состояния и поведения более чем сотни модульных тестов. Это стоит этих 2 недель или так боли для набирания скорость и действительно помогает Вам сфокусироваться на какой потребности быть протестированным.

2
ответ дан Jason Slocomb 27 November 2019 в 03:40
поделиться

Одна из хороших вещей о платформе насмешки - то, что она позволяет устанавливать ожидания по объектам, которые дразнят. С ожиданиями я могу тогда настроить все виды условий осуществить код, это тестируется.

0
ответ дан Darren 27 November 2019 в 03:40
поделиться

Изолирующая среда или среда для пересмешки позволяет вам тестировать нужный код без его зависимостей. Это позволяет проводить короткие тесты, позволяет быстро отлаживать и легко создавать защитную сеть для тестов вокруг кода. Разные фреймворки имеют разные функции, и, как уже было сказано, это инструмент, и вы должны выбрать правильный инструмент для работы.

0
ответ дан 27 November 2019 в 03:40
поделиться

Одна вещь, которая беспокоит меня в насмешливом фреймворке, заключается в том, что «какая функция должна работать с заданным i / p» через

when (mock .someMethod ("some arg")). thenReturn ("something");

утверждение распространяется на многие классы модульного тестирования.

Позвольте мне уточнить на примере. Допустим, была функция интерфейса DAO getEmp (int EmpID), которая возвращала объект сотрудника при передаче идентификатора сотрудника в качестве параметра. Предположим, что эту функцию имитировали 10 различных классов модульного тестирования. Теперь, если в будущем эта функция будет изменена для возврата более новой версии объекта Employee, нужно будет перейти к каждому из 10 различных классов, чтобы обновить это изменение.

Недостатки заключаются в следующем ...

a) Я не знаю, как определить все классы, которые имитируют эту функцию, чтобы я мог обновить это изменение.

б) Мои существующие тестовые примеры, которые используют фиктивный объект DAO, по-прежнему блаженно не знают об изменениях, произошедших с интерфейсом DAO, потому что макет не изменился и, следовательно, продолжает оставаться зеленым. В идеале, если бы я сам написал один макет класса и использовал его повсюду, у меня было бы только одно место для обновления для новой версии объекта Employee. Кроме того, как только я обновляюсь в этом одном месте, все мои существующие тестовые примеры, которые используют макет, сломаются, и тогда я точно буду знать, в какие места мне нужно пойти и выполнить обновление для нового объекта Employee.

Любые мысли по поводу моих взглядов ..

2
ответ дан 27 November 2019 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: