Должен ли я также запускать модульные тесты для моего SQLRepository? - PullRequest
4 голосов
/ 10 июля 2009

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

У меня вопрос: в какой момент я создаю интеграционные тесты для SQL-версии репозитория?

Меня беспокоит то, что код для доступа к данным из объектов (Test Repository) будет работать нормально. Но версия базы данных (SQL Repository) настолько отличается под покровом, что мой жизненно важный код в SQL Repository окажется неработающим и сам по себе не будет проверен. Как мне убедиться, что он работает как задумано? Я что-то упускаю из процесса?

Привет.

Ответы [ 2 ]

3 голосов
/ 10 июля 2009

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

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

Наконец, в ваших интеграционных тестах сделайте все, что вам нужно сделать.

0 голосов
/ 10 июля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...