Включая структуру модуля для тестирования, но не для распространения

Рассмотрим следующую структуру пакета

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, и у меня недостаточно информации о настройке вашего проекта, я не знаю, как бы вы сделали это в вашем случае.

Другие вопросы по тегам