Ответ 1
Можно ли использовать сразу несколько тестовых фреймворков?
Некоторые проекты с открытым исходным кодом используют несколько схем тестирования. Общей настройкой будет использование модульного модуля тестирования с издевательской структурой, если разработчики проекта не захотят катить свои собственные макеты.
Итак, когда вы достигаете избыточного тестирования единицы измерения?
Вы быстро доходите до модульного тестирования "overkill", и вы, возможно, уже достигли его. Существует несколько способов переусердствовать в тестах вообще, которые побеждают цель TDD, BDD, ADD и любой используемый вами подход. Вот один из них:
Перезагрузка единицы тестирования достигается, когда вы начинаете писать другие типы тестов, как если бы они были модульными тестами. Предполагается, что это должно быть исправлено с помощью издевательских фреймворков (для тестирования взаимодействий, выделенных только для одного класса) и спецификационных фреймворков (для проверки функций и заданных требований). У многих разработчиков есть путаница, которые, по-видимому, считают, что это хорошая идея относиться ко всем различным типам тестов одинаково, что приводит к некоторым грязным гибридам.
Несмотря на то, что TDD фокусируется на модульном тестировании, вы все равно обнаружите, что выполняете функциональные, интеграционные и эксплуатационные тесты. Однако вы должны напомнить себе, что их охват значительно отличается от модульных тестов. Вот почему существует так много доступных инструментов тестирования, поскольку существуют различные типы тестов. Нет ничего плохого в использовании многих схем тестирования, и большинство из них совместимы друг с другом.
Итак, при написании модульных тестов есть пара сладких пятен, чтобы думать о том, когда пишите тесты:
unit test dirty hybrids integration test
--------- ------------- ----------------
* isolated * using many classes
* well defined | * tests a larger feature
* repeatable | * tests a data set
|
| | |
| | |
v v v
O <-----------------------------------------------------> O
^ ^ ^
| | |
sweet spot world full of pain sweet spot
Модульные тесты легко писать, и вы хотите написать их много. Но если вы напишете тест, в котором слишком много зависимостей, вы получите много работы, как только начнут меняться требования. Когда код разбивается на unit test, у которого слишком много зависимостей, вам нужно проверить код многих классов, а не один и только один класс. Это означает, что вы должны проверить все его зависимости, чтобы увидеть, где проблема, которая поражает цель модульного тестирования в TDD-смысле. В большом проекте это будет невероятно трудоемким.
Мораль этой истории заключается в том, чтобы не смешивать модульные тесты с интеграционными тестами. Потому что просто поставили: они разные. Это не означает, что тесты других типов плохие, но вместо этого их следует рассматривать скорее как спецификации или проверки здравомыслия. Просто потому, что тест прерывается, они не могут быть признаком неправильного кода. Например:
- Если тест интеграции прерывается, может возникнуть проблема с некоторым требованием, которое у вас есть и нужно пересмотреть требование, удалить, заменить или изменить тест.
- Если тест производительности прерывается, в зависимости от того, как он был реализован, стохастический характер этого теста может заставить вас думать, что он просто работает медленно в этом случае.
Единственное, что нужно иметь в виду - это организовать тесты таким образом, чтобы их было легко отличить и найти.
Вам нужно постоянно писать тесты?
Есть моменты, когда нормально пропускать тестовые случаи, потому что проверка с помощью ручного тестирования дыма - это просто сделать и не принимать много времени. Руководство smoke test в этом смысле - это действие, при котором вы запускаете свое приложение, чтобы протестировать функциональность самостоятельно или кого-то еще, кто не закодировал ваши вещи. То есть, если автоматизированный тест, который вы собираетесь писать, - все это:
- слишком сложный и запутанный
- потребуется много времени для написания
- нет готовой и простой в использовании рамки тестирования для ее обработки.
- не даст большого выигрыша, например, мало шансов на регресс
- может выполняться вручную с гораздо меньшими усилиями, чем написание автоматизированного теста.
... затем напишите и проверьте его как ручной тестовый пример. Это не стоит, если тестовый пример займет несколько дней, чтобы писать, когда дым, проверяющий его вручную, занимает всего лишь минуту.