Чтобы нарисовать аспекты нескольких ответов вместе и добавить мой 2p ...
Примечание: мои комментарии касаются, в частности , тестирования базы данных , а не тестирования пользовательского интерфейса (хотя очевидно, что аналогичное применимо).
Базы данных так же нуждаются в тестировании, как и интерфейсные приложения, но, как правило, тестируются на основе «работает ли он с интерфейсом?» или «отчеты дают правильный результат?», который, по моему мнению, тестируется очень поздно в процессе разработки базы данных и не очень надежен.
У нас есть ряд клиентов, которые используют модульное / интеграционное / системное тестирование для своей базы данных хранилища данных в дополнение к обычному UAT / performance / et al. тесты. Они обнаружили, что с помощью непрерывной интеграции и автоматизированного тестирования они сталкиваются со многими проблемами, прежде чем переходить к традиционному UAT, что экономит время в UAT и увеличивает шансы на успех UAT.
Я уверен, что большинство согласится с тем, что к тестированию базы данных следует применять такую же строгость, как к тестированию внешнего интерфейса или отчета.
Ключевым моментом при тестировании является тестирование небольших простых объектов, обеспечивая их правильность, прежде чем переходить к сложным комбинациям объектов, обеспечивая их правильность, прежде чем перейти к более широкой системе.
Таким образом, давая некоторый контекст для моего ответа ...
Модульное тестирование
- имеет цель тестирования, чтобы доказать, что модуль работает, например, таблица, представление, функция, хранимая процедура
- следует «заглушить» интерфейсы для удаления внешних зависимостей
- предоставит свои данные. Вам необходимо известное начальное состояние данных, поэтому, если существует вероятность существующего предварительного теста данных, то усечения / удаления должны произойти до заполнения
- будет работать идеально в своем собственном контексте выполнения
- очистит после себя и удалит данные, которые он использовал; это важно только тогда, когда заглушки не используются.
Преимущества этого состоят в том, что вы удаляете все внешние зависимости от теста и выполняете наименьшее количество тестов, чтобы доказать правильность. Очевидно, что эти тесты не могут быть запущены в производственной базе данных. Может случиться так, что есть несколько типов тестов, которые вы будете выполнять, в зависимости от типа устройства, включая:
- проверка схемы, некоторые могут назвать это тестом «контракт с данными»
- значения столбца, проходящие через
- использование логических путей с различными значениями данных для функций, процедур, представлений, вычисляемых столбцов
- тестирование крайнего случая - NULL, неверные данные, отрицательные числа, слишком большие значения
(Блок) интеграционное тестирование
Я нашел этот пост SE полезным в разговоре о различных типах тестирования.
- имеет цель тестирования, чтобы доказать, что устройства объединяются вместе
- выполняется на нескольких единицах вместе
- следует «заглушить» интерфейсы для удаления внешних зависимостей
- будет предоставлять свои собственные данные, чтобы удалить влияние внешних данных
- будет работать идеально в своем собственном контексте выполнения
- очистит после себя и удалит созданные данные; это важно только тогда, когда заглушки не используются.
При переходе от модульных тестов к этим интеграционным тестам часто будет немного больше данных, чтобы протестировать более широкий спектр тестовых случаев. Очевидно, что эти тесты не могут быть запущены в производственной базе данных.
Затем он переходит к системному тестированию , тестированию системной интеграции (он же конец-2-end тестирование) с увеличением объемов данных и увеличением объема. Все эти тесты должны стать частью системы регрессионного тестирования. Некоторые из этих тестов могут быть выбраны пользователями для выполнения в рамках UAT, но UAT - это тесты, определенные пользователями , а не как они определены ИТ-отделом - обычная проблема!
Итак, теперь, когда я дал некоторый контекст, чтобы ответить на ваши актуальные вопросы
- предварительное заполнение данных для модульного и интеграционного тестирования может привести к ложным ошибкам тестирования, и его следует избегать.
- Единственный способ обеспечить непротиворечивые тесты - не делать предположений об исходных данных и тщательно их контролировать.
- важен отдельный контекст выполнения теста, чтобы гарантировать, что один тестер не конфликтует с другим тестером, выполняющим те же тесты в другой ветви кода базы данных, контролируемой исходным кодом.