用Python对C代码进行单元测试的最简便方法
我有一堆C语言的代码,想用Python的unittest库来进行单元测试(在Windows上),但我在想怎么才能让Python调用这些C代码并获取结果。有没有人有简单的方法可以做到这一点?
这里有一些想法:
- 使用Python的API把代码包装成一个Python C扩展
- 用SWIG来包装C代码
- 给C代码加一个DLL包装,然后用ctypes在Python中加载它
- 在C代码中加一个小的XML-RPC服务器,然后用xmlrpclib来调用(是的,我知道这听起来有点奇怪!)
有没有一种标准的方法可以做到这一点?我会经常这样做,涉及不同的C模块,所以我想找一种最省事的方法。
2 个回答
8
我觉得具体的解决方案要看你的代码。并不是所有的库都能很容易地做成DLL(动态链接库)。如果你的库可以的话,使用ctypes
绝对是最简单的方法——只需要把你的库做成一个DLL,然后用ctypes
来测试它。额外的好处是,这样你就把库方便地包装成了一个独立的DLL,这样可以让你的应用程序和库之间的关系更松散。
不过,有时候你的C代码和测试用的Python代码之间需要更深入的互动。这种情况下,最好把它作为一个扩展来处理,SWIG就是一个很不错的工具,它可以自动化处理大部分你可能觉得无聊的步骤。