Ваш недостающий принцип, но это распространенная проблема. Я думаю, что каждая команда решает его (или нет) по-своему.
Побочные эффекты
Вы будете продолжать иметь этот вопрос с любой функцией, которая имеет побочные эффекты. Я нашел для функции эффекта боковых я должен сделать тесты, обеспечивающие некоторые или все из следующих действий:
- Это был/не был вызван
- число раз его называли
- Какие аргументы были передано ему
- Порядок звонков.
Обеспечение этого в тесте обычно означает нарушение инкапсуляции (я взаимодействую и знаю с реализацией). Каждый раз, когда вы это делаете, вы всегда неявно связываете тест с реализацией. Это приведет к необходимости обновления теста при обновлении частей реализации, которые вы подвергаете/тестируете.
многоразовый Mocks
Я использовал многоразовые издевается с большим эффектом. Их компромисс - это их реализация, более сложная, потому что она должна быть более полной. Вы уменьшаете стоимость обновления тестов для размещения рефакторов.
Прием TDD
Другой вариант изменить то, что ваше тестирование на. Поскольку это действительно связано с изменением стратегии тестирования, это не то, что нужно легко вступать. Сначала вы можете сделать небольшой анализ и посмотреть, действительно ли это будет соответствовать вашей ситуации.
Я использовал TDD с модульными испытаниями. Я столкнулся с проблемами, которые, по моему мнению, нам не пришлось иметь дело. В частности, вокруг рефакторов я заметил, что нам обычно приходилось обновлять многие тесты. Эти рефактории не были частью единицы кода, а скорее реструктуризацией основных компонентов. Я знаю, что многие люди скажут, что проблема заключалась в частых крупных изменениях, а не в модульном тестировании. Вероятно, есть некоторые истины в отношении больших изменений, частично являющихся результатом нашего планирования/архитектуры. Тем не менее, это было также связано с бизнес-решениями, которые вызвали изменения в направлениях. Эти и другие законные причины привели к необходимости внесения больших изменений в код. Конечным результатом были большие рефакторины, становящиеся более медленными и болезненными в результате всех обновлений теста.
Мы также столкнулись с ошибками из-за проблем с интеграцией, которые не проверялись модульными испытаниями. Мы сделали некоторые из них с помощью ручного приемочного тестирования. На самом деле мы сделали немало работы, чтобы сделать приемочные тесты максимально возможными. Они все еще были ручными, и мы чувствовали, что между модульными тестами и приемочным тестом было много перекрестных ссылок, что должен быть способ уменьшить затраты на реализацию обоих.
Тогда у компании были увольнения. Внезапно у нас не было такого же количества ресурсов, чтобы бросать на программирование и обслуживание. Мы были вынуждены получить наибольшую отдачу за все, что мы делали, включая тестирование. Начнем с того, что мы добавили то, что мы назвали частичными испытаниями стека, чтобы покрыть общие проблемы интеграции, которые у нас были. Они оказались настолько эффективными, что начали делать менее классические модульные тесты. Мы также избавились от ручных приемочных испытаний (Selenium). Мы медленно продвигались туда, где тесты начали тестироваться, пока мы практически не выполнили приемочные испытания, но без браузера. Мы будем моделировать метод GET, POST или PUT конкретному контроллеру и проверять критерии приемки.
- База данных была обновлена правильно
- правильный код статуса HTTP был возвращен
- страница была возвращена, что:
- был Valid HTML 4.01 Strict
- содержал информацию, которую мы хотели отправить назад к пользователю
Мы закончили с меньшим количеством ошибок. В частности, почти все ошибки интеграции и ошибки из-за больших рефакторов исчезли почти полностью.
Были компромиссы. Просто выяснилось, что плюсы намного перевешивают минусы из-за ситуации. Минусы:
- Тест обычно был более сложным, и почти каждый испытывает некоторые побочные эффекты.
- Мы можем сказать, что когда что-то ломается, но это не так целенаправлено, как модульные тесты, поэтому нам нужно сделать больше отладки, чтобы отслеживать, где проблема.
Всякий раз, когда вам нужно что-то издеваться, сначала подумайте, можете ли вы создать макеты вручную. Вы часто обнаружите, что на лету макет обычно дает запах открытой сложности. Если это так, тогда создайте ручные чужие, оставайтесь на лету mocks –
Что-то, чтобы рассмотреть: http://en.wikipedia.org/wiki/Interface_segregation_principle – TrueWill