Включая структуру модуля для тестирования, но не для распространения - PullRequest
0 голосов
/ 04 июня 2018

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

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 Ответ

0 голосов
/ 04 июня 2018

tox создает пакет в точности так, как он указан в setup.py и MANIFEST.in, запустив для вас python setup.py sdist.Нет никакого способа создать специальный пакет для тестирования с помощью tox.Это отрицательно скажется на назначении tox, которое заключается в том, что вы тестируете именно тот пакет, который хотите выпустить.

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

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

...