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

Jon*_*lls 20 c python swig unit-testing

我有一堆C代码,我想使用Python的unittest库(在Windows中)进行单元测试,但我正在尝试找出连接C代码的最佳方法,以便Python可以执行它(和得到结果).有没有人以最简单的方式做到这一点?

一些想法包括:

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

这样做有规范的方法吗?我将使用不同的C模块进行相当多的操作,所以我想找到一种最省力的方法.

Cas*_*can 9

使用ctypes将是我的第一直觉,不过我必须承认,如果我首先测试的是不会从Python接口的C代码,我只会使用check.检查具有能够正确报告段错误的测试用例的强大优势.这是因为它在一个单独的进程中运行每个测试用例.

现在,如果你打算为C代码创建一个python包装器,我只需要对包装器进行单元测试.除了上面列出的方法之外,您还可以使用Cython编写类似python的代码的包装器,然后从Python中对其进行单元测试.


Eli*_*sky 5

我认为确切的解决方案取决于您的代码.并非所有库都适合作为DLL包装.如果你是,那么ctypes肯定是最简单的方法 - 只需从你的库中制作一个DLL,然后用它来测试它ctypes.另外一个好处是,您现在可以将您的库方便地包装为独立的DLL,这有助于解耦您的应用程序.

但是,有时候,您的C代码和测试Python代码之间需要进行更彻底的交互.然后,最好将它作为一个扩展来挂钩,对于这个扩展,SWIG是一个非常好的工具,可以自动消除你对这个过程感到无聊的大多数事情.