从CMake运行pytest测试,其中测试和源位于不同的文件夹中

时间:2018-09-25 09:06:33

标签: python python-3.x cmake pytest

我有一个同时使用C ++和python源的基于CMake的项目。通过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 :(得分:1)

有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群集中加载模块),并发现测试不正确。

第二个是最灵活的一个。它依靠来自https://docs.pytest.org/en/latest/pythonpath.html的信息。最重要的部分:

  

[python -m pytest]调用会将当前目录添加到sys.path。

因此我们仅需在将测试运行到源目录时设置当前目录。

注意:对于unittest(模块)特定的其他替代方法,您还可以在Running unittest with typical test directory structure

中找到某些内容。