Есть ли способ узнать, выполняется ли функция в юнит-тесте? - PullRequest
1 голос
/ 21 октября 2009

Я использую файл конфигурации, чтобы получить информацию для моей базы данных. Он всегда получает имя хоста, а затем выясняет, какие параметры базы данных использовать из этого файла конфигурации. Я хочу быть в состоянии сказать, если я нахожусь внутри unittest здесь и использовать вместо этого базу данных sqlite в памяти. Есть ли способ сказать в этот момент, находится ли я внутри юнит-теста, или мне придется искать другой путь?

Ответы [ 5 ]

3 голосов
/ 21 октября 2009

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

Примечание: в Python IoC работает немного по-другому. См. http://code.activestate.com/recipes/413268/ для получения дополнительной информации.

1 голос
/ 21 октября 2009

Используйте какую-либо конфигурацию базы данных и настройте, какую базу данных использовать, и настройте базу данных в памяти во время модульных тестов.

0 голосов
/ 21 октября 2009

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

0 голосов
/ 21 октября 2009

Как указывает Роберт Харви, было бы лучше, если бы вы могли передать настройки компоненту вместо того, чтобы компонент сам его просматривал. Это позволяет вам менять настройки, просто предоставляя другой объект, т.е.

TestComponent(TestSettings())

вместо

TestComponent(LiveSettings())

или, если вы хотите использовать конфигурационные файлы,

TestComponent(Settings("test.conf"))

вместо

TestComponent(Settings("live.conf"))
0 голосов
/ 21 октября 2009

Это грубая сила, но она работает. У вас должна быть переменная окружения UNIT_TEST, которую проверяет ваш код, и установите ее в драйвере модульного теста.

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