Запуск теста pytest из CMake, где тест и исходники находятся в разных папках - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть проект на основе CMake, который использует исходные тексты на C ++ и Python.Тесты добавляются через add_test для всех тестов C ++ в структуре папок, например:

src
  mynamespace/foo.cpp
  mypyspace/mypkg/__init__.py
  mypyspace/mypkg/bar.py
test
  mynamespace/testFoo.cpp
  mypyspace/testBar.py

В testBar.py У меня есть import mypkg, и я хочу запустить его с add_test(... COMMAND pytest WORKING_DIRECTORY .../test)

Конечно, он не находит мой пакет, но я также не хочу его устанавливать (он необходим для генерации некоторых вещей во время сборки и активно разрабатывается как часть других источников).

Что такоеправильный / предпочтительный способ выполнения этих тестов?

Примечания:

  • Я не хочу перемещать источники из src или тесты из test
  • set_tests_properties может устанавливать переменные окружения.

Я думаю, настройка PYTHONPATH=.../src/mypyspace должна работать, но это также игнорирует изменения для пользователей PYTHONPATH.

1 Ответ

0 голосов
/ 25 сентября 2018

Есть 2 варианта:

  1. Использовать `PYTHONPATH add_test (NAME python-tests COMMAND ${PYTHON_EXECUTABLE} -m pytest # Or just COMMAND pytest WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) set_tests_properties(python-tests PROPERTIES ENVIRONMENT "PYTHONPATH=${PROJECT_SOURCE_DIR}/src/mypyspace:$ENV{PYTHONPATH}")

  2. Вызвать внутри каталога src add_test (NAME python-tests COMMAND ${PYTHON_EXECUTABLE} -m pytest ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/mypyspace )

Недостаток первого подхода заключается в том, что пользователь может настроить и затем изменить свою среду, чтобы PYTHONPATH отличался (например, загружая модули в кластеры HPC), и обнаружил, что тесты были выполнены неправильно.

2-й - самый гибкий.Он опирается на информацию из https://docs.pytest.org/en/latest/pythonpath.html. Самая важная часть:

вызов [python -m pytest] добавит текущий каталог в sys.path.

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

Примечание: для других альтернатив, специфичных для unittest (модуль), вы также можете найти что-то в Запуск unittestс типичной тестовой структурой каталогов

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