我有一堆C代码,我想使用Python的unittest库(在Windows中)进行单元测试,但我正在尝试找出连接C代码的最佳方法,以便Python可以执行它(并得到结果)。有没有人以最简单的方式做到这一点?
一些想法包括:
有这样的规范方法吗?我将使用不同的C模块进行相当多的操作,所以我想找到一种最省力的方法。
答案 0 :(得分:9)
使用ctypes将是我的第一直觉,但我必须承认,如果我测试的C代码首先不会从Python接口,我只会使用check。 Check具有能够正确报告段错误的测试用例的强大优势。这是因为它在一个单独的过程中运行每个测试用例。
现在,如果你打算为C代码创建一个python包装器,我只需要对包装器进行单元测试。除了上面列出的方法之外,您还可以使用Cython编写类似python的代码的包装器,然后从Python中对其进行单元测试。
答案 1 :(得分:5)
我认为确切的解决方案取决于您的代码。并非所有库都适合作为DLL包装。如果是,那么ctypes
肯定是最简单的方法 - 只需从您的库中创建一个DLL,然后使用ctypes
进行测试。另外一个好处是,您现在可以将您的库方便地包装为独立的DLL,这有助于解耦您的应用程序。
但是,有时候,您的C代码和测试Python代码之间需要进行更彻底的交互。然后,最好将它作为一个扩展钩子,对于这个扩展,SWIG是一个非常好的工具,可以自动消除你对这个过程感到无聊的大多数事情。