Включая структуру модуля для тестирования, но не для распространения
Рассмотрим следующую структуру пакета
project # Project root
package # Main package that one wants to distribute
... # Modules comprising the package
mockup # Mock up of a package structure used for testing
... # Modules comprising the mock up structure
tests # Testing package containing unittests
... # Modules comprising the unittests
setup.py # setup script
Как настроить setup.py
сценарий для
- включать только
package
исходный код, но неtests
ниmockup
папка во время распространения - еще включают
mockup
папка при запускеtests
с токсиком
В настоящее время я указал следующее; который отличает код пакета от кода тестирования, но не делает mockup
доступно во время выполнения теста.
setup(
...
package = find_packages(exclude=['tests','mockup']), # Includes package code but not tests or mockup folders
test_suite ='tests', # Includes tests but not the mockup's
...
)
Определение mockup/**
в MANIFEST.in
включает его в дистрибутив, как и указание package_data
/include_package_data
в setup.py
, Возможно, Tox допускает макетные структуры, но я не нахожу это в документации.
1 ответ
tox создает пакет точно так, как указано в setup.py
а также MANIFEST.in
запустив python setup.py sdist
для тебя. Нет никакого способа собрать специальный пакет для тестирования с помощью tox. Это отрицательно скажется на назначении tox, которое заключается в том, что вы тестируете именно тот пакет, который хотите выпустить.
Если вы хотите запустить некоторые специальные тесты с файлами / папками, которые не должны быть частью релиза, но которые являются частью проекта (то есть частью структуры проекта, в которой ваш tox.ini
живет) Я бы порекомендовал запустить эти тесты для установки вашего проекта, которая содержит все, что вам нужно. Вам все равно следует протестировать пакет на соответствие другим тестам, но эти другие тесты могут проводиться в другой среде токсинов.
Очень упрощенно, в проекте, который содержит разные типы тестов в разных папках tests
это может выглядеть примерно так (я пишу это с точки зрения пользователя pytest - вам придется перевести это на unittest - или просто запустить свои юнит-тесты вот так с pytest:)):
[tox]
envlist = tests,mockuptests
[testenv:tests]
description = runs the "normal" tests against the installed package
deps = pytest
commands = pytest tests/normal
[testenv:mockuptests]
description = runs the "mockup" tests against an editable installation
usedevelop = True
deps = pytest
commands = pytest tests/mockup
Во-вторых, я думаю, что тестирование пакета на основе макетов также должно быть возможным по-другому, без необходимости помещать эти файлы в пакет, в зависимости от того, как структурированы ваши тесты и как работает ваш testrunner. Поскольку я запускаю unittest, и у меня недостаточно информации о настройке вашего проекта, я не знаю, как бы вы сделали это в вашем случае.