Да, вы должны проверить всю цепочку событий как единое целое. Итак, в вашем примере с процедурой, которая вставляется в таблицу и вызывает срабатывание нескольких триггеров, вы должны написать модульные тесты, которые оценивают процедуру для различных входных данных. Каждый модульный тест должен пройти или не пройти в зависимости от того, возвращает ли он правильные значения, корректно ли изменяет состояние таблиц, создает правильное электронное письмо и даже отправляет правильные сетевые пакеты, если он предназначен для таких действий. Короче говоря, каждый эффект, который имеет устройство, должен быть проверен.
Вы правы, что разработка модульных тестов требует некоторой работы, но большую часть этой работы нужно выполнить для ручного тестирования устройства, вы просто сохраняете работу, необходимую для тестирования устройства, чтобы при внесении изменений в будущем тестирование может быть таким же тщательным и значительно проще.
Изменение данных делает тестирование более трудным, но это не делает тестирование менее важным и фактически увеличивает ценность модульного тестирования, поскольку большинство трудностей нужно продумывать только один раз, а не каждый раз, когда в устройство вносятся изменения. Сохраненные наборы данных, вставки / обновления / удаления, которые являются частью настройки / разрыва, и операция с узкой областью действия - все это может быть использовано для облегчения этого. Поскольку вопрос не относится к базе данных, детали могут отличаться.
Не существует порога сложности на верхнем или нижнем конце, который должен мешать вам тестировать или модульное тестирование. Рассмотрим эти вопросы:
- Вы всегда пишете код без ошибок?
- Маленькие юниты всегда без ошибок?
- Это нормально для большой единицы, чтобы иметь ошибку?
- Сколько ошибок нужно, чтобы вызвать катастрофу?
Предположим, вы начинаете новую работу, и вам поручено оптимизировать небольшую функцию, используемую во многих местах. Вся заявка была написана и поддерживается сотрудником, которого никто даже не помнит. У единиц есть документация, описывающая нормальное ожидаемое поведение, но немного больше. Что из этого вы бы предпочли найти?
- Никаких модульных тестов нигде в приложении. После внесения изменений вы можете провести некоторое ручное тестирование самого устройства, чтобы убедиться, что оно по-прежнему возвращает ожидаемые значения в документации. Затем вы можете развернуть его в производство, скрестить пальцы и надеяться, что он работает (в конце концов, вы всегда пишете безошибочный код, а оптимизация в одном блоке никогда не повлияет на другой) или потратить огромное количество времени на изучение работы всего приложения. работает так, что вы можете вручную проверить каждую единицу прямо или косвенно.
- Модульные тесты во всем приложении, которые запускаются автоматически ежедневно или по запросу. Они проверяют не только нормальные входные значения и их ожидаемый отклик, но также ненормальные значения и ожидаемые исключения, которые возникают. Вы вносите изменения и запускаете пакет модульных тестов для приложения, сразу же увидев, что три других модуля больше не дают ожидаемых результатов. Два из них доброкачественные, так что вы настраиваете модульные тесты, чтобы учесть это. Третий требует еще одного небольшого изменения и небольшого нового модульного теста. После внесения изменений весь набор тестов завершается успешно, и вы с уверенностью внедряете изменения.