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

2024-10-05 10:09:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基于CGED的项目,它既使用C++又使用Python源代码。测试通过在{ /p>文件夹结构中的所有C++测试通过^ {CD1>}添加。

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的更改。在


Tags: 项目pytestsrc文件夹源代码结构cpp
1条回答
网友
1楼 · 发布于 2024-10-05 10:09:10

有两种选择:

  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目录内调用 ^{/cd2}>

第一种方法的缺点是,用户可能会配置并在以后更改其环境,从而使PYTHONPATH不同(例如,在HPC集群中加载模块),并发现测试不正确地成功。在

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

the [python -m pytest] call will add the current directory to sys.path.

所以我们只需要在运行测试到源目录时设置当前目录。在

注意:对于其他特定于unittest(模块)的替代品,您也可以在Running unittest with typical test directory structure中找到一些东西

相关问题 更多 >

    热门问题