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

2024-03-29 14:37:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆C代码,我想用Python的unit test库(在Windows中)对它们进行单元测试,但我正在试图找出连接C代码的最佳方式,以便Python能够执行它(并得到结果)。有没有人有过用最简单的方法做这件事的经验?

一些想法包括:

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

有没有一种规范的方法来做这件事?我会用不同的C模块做很多事情,所以我想找到一种最省力的方法。


Tags: 方法代码testpythonapiwindows方式unit经验
2条回答

我认为确切的解决方案取决于你的代码。并非所有的库都很容易适合包装为DLL。如果是,那么ctypes无疑是最简单的方法-只需从库中创建一个DLL,然后用ctypes进行测试。一个额外的好处是,您现在可以方便地将库包装为一个独立的DLL,这有助于分离应用程序。

但是,有时需要在C代码和测试Python代码之间进行更彻底的交互。然后,最好将它作为一个扩展来挂接,对于这个扩展,SWIG是一个非常好的工具,它可以自动处理大多数您会觉得无聊的过程。

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

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

相关问题 更多 >