【问题标题】:Unit-testing a boost::python library in python在 python 中对 boost::python 库进行单元测试
【发布时间】:2016-09-01 12:32:58
【问题描述】:

所以我有一个使用 boost::python (C++) 创建的共享库。 对于里面的 C++ 函数,我有单元测试来检查它们是否正常工作。 现在我想使用单元测试来查看我是否正确实现了python接口。 为此我考虑过使用python包unittest

现在我的文件夹设置大致如下:

project
  |
   -- C++ source (library and boost::python stuff)
  |
   -- build (here the shared library is located)
  |
   -- Test (here I have the python classes that should test the interface)

test 文件夹有一些反映 python 接口结构的子文件夹,包含许多用于测试库不同方面的小型 python 模块。

现在问题

我如何import共享库进入测试?

到目前为止,我尝试的是在我的test_main.py

import sys
sys.path.insert(0,'../build')

但这对 test 文件夹中的模块没有帮助。无论如何,将这条路径硬编码到测试代码中似乎是 hackish。我也不想安装未经测试的库只是为了找出测试失败然后再次卸载它。

【问题讨论】:

    标签: python c++ unit-testing boost out-of-source


    【解决方案1】:

    您可以做的是在您的案例project 的根目录中运行测试。你可以做python Test/test_name.py。确保你的构建库有一个__init__.py 文件

    测试的唯一变化是你有

    from build import blah #blah is the component you testing
    #test code here
    

    【讨论】:

    • 实际上,这在我的机器上不起作用。当我在根目录中打开 python shell 并输入:import build.blah 时,它可以工作。但是如果我在这个文件中用import build.blah 调用python Test/my_test.py,它就不起作用了。
    • ...你的 test.py 应该有from build.blah import blah
    • 这不是问题(我试过你的建议)。它抱怨“没有名为 build 的模块”。我认为在Test/my_test.py 中它看起来仍然相对于Test,即使它是从父文件夹调用的。
    • 如果您使用PYTHONPATH=.${PYTHONPATH:+:}$PYTHONPATH python Test/test_name.py 运行python,这将起作用。基本上和你的 sys.path 一样,但至少你把它移到外面并保持你的 Python 更整洁。如果您的代码想要加载本机编译的模块,您可能还必须干预LD_LIBRARY_PATH
    • @clacke 这似乎有效。现在唯一的问题(但我忘了在问题中提到它)是,如果我有不同的构建配置(调试/发布)作为子文件夹,则配置在 import 语句中是硬编码的。但现在我会坚持你的建议,直到我觉得它变得太混乱了。
    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多