Тестовые предупреждения для дополнительных пакетов
Мой код предоставляет дополнительные функции, которые используют дополнительные пакеты.
Когда пользователь импортирует пакет, который содержит эти дополнительные функции, отображается предупреждение, если у него / нее не установлен дополнительный пакет. Например:
Пожалуйста, установите
optional-package
использовать все функции
Чтобы протестировать эти дополнительные функции, дополнительный пакет устанавливается как зависимость в virtualenv, tox
создает:
# tox.ini
[my-env]
deps = optional-package
Проблема в том, что я хочу проверить это:
- Предупреждение отображается, когда у пользователя не установлен пакет
- Предупреждение не отображается, когда у пользователя есть пакет
Тем не менее, кажется, что Python не предоставляет способ выгрузки пакетов.
Как я могу создать тест для описания контекста, в котором у пользователя нет дополнительного пакета в его системе, если в то же время мне нужно tox
автоматически установить его как зависимость?
1 ответ
Вот один из способов проверить это some_module
выдает предупреждение, когда optional.package
не доступен:
import some_module
# ...
@mock.patch.dict("sys.modules", {"optional.package": None})
def test_warning_optional_package_not_installed(self):
with self.assertWarns(SomeWarning):
imp.reload(some_module)
Кроме того, вы можете определить несколько сред тестирования в вашем tox.ini
файл, с дополнительными пакетами и без них. Вы можете настроить tox для установки переменных среды в зависимости от того, был ли установлен пакет:
[tox]
envlist = {with,without}_optional
[testenv]
basepython = python3.5
deps =
required-package
with_optional: optional-package
setenv =
with_optional: OPTIONAL_PACKAGE_AVAILABLE = true
commands = python -m unittest tests
Затем вы можете включать и отключать тесты на основе значения переменной среды:
@unittest.skipUnless(os.env["OPTIONAL_PACKAGE_AVAILABLE"] == "true")
def test_no_warning_optional_package(self):
with warnings.catch_warnings(record=True) as w:
imp.reload(some_module)
self.assertFalse(w)