代码之家  ›  专栏  ›  技术社区  ›  Jon Mills

用Python对C代码进行单元测试的最简单方法

  •  20
  • Jon Mills  · 技术社区  · 14 年前

    我有一堆C代码,我想使用Python的unittest库(在Windows中)进行单元测试,但我正在尝试找出连接C代码的最佳方法,以便Python可以执行它(并获得结果)。有没有人有过用最简单的方法做这件事的经验?

    • 使用pythonapi将代码包装为Python C扩展
    • 向C代码添加一个DLL包装器,并使用ctypes将其加载到Python中
    • 在c代码中添加一个小型的XML-RPC服务器,并使用xmlrpclib调用它(是的,我知道这似乎有点遥远!)

    有没有一个规范的方法可以做到这一点?我会用不同的C模块做很多这样的工作,所以我想找到一种最省力的方法。

    2 回复  |  直到 14 年前
        1
  •  8
  •   Eli Bendersky    14 年前

    我认为确切的解决方案取决于你的代码。并不是所有的库都可以轻松地包装为DLL。如果你是,那么 ctypes C类型

    但是,有时需要在C代码和测试Python代码之间进行更彻底的交互。然后,最好将它作为一个扩展来挂钩,因为SWIG是一个非常好的工具,它可以自动处理流程中的大部分无聊事情。

        2
  •  11
  •   payala    10 年前

    使用ctypes将是我的第一本能,尽管我必须承认,如果我测试的是一开始就不会与Python接口的C代码,我只会使用 check Check 具有强大的优势,能够正确地报告出错的测试用例。这是因为它在一个单独的进程中运行每个测试用例。

    现在,如果要为C代码创建python包装器,我只需对包装器进行单元测试。除了上面列出的方法之外,还可以使用Cython用类似python的代码编写这样的包装器,然后从python对其进行unittest。