2024-05-23 14:39:55 发布
网友
我有一堆C代码,我想用Python的unit test库(在Windows中)对它们进行单元测试,但我正在试图找出连接C代码的最佳方式,以便Python能够执行它(并得到结果)。有没有人有过用最简单的方法做这件事的经验?
一些想法包括:
有没有一种规范的方法来做这件事?我会用不同的C模块做很多事情,所以我想找到一种最省力的方法。
我认为确切的解决方案取决于你的代码。并非所有的库都很容易适合包装为DLL。如果是,那么ctypes无疑是最简单的方法-只需从库中创建一个DLL,然后用ctypes进行测试。一个额外的好处是,您现在可以方便地将库包装为一个独立的DLL,这有助于分离应用程序。
ctypes
但是,有时需要在C代码和测试Python代码之间进行更彻底的交互。然后,最好将它作为一个扩展来挂接,对于这个扩展,SWIG是一个非常好的工具,它可以自动处理大多数您会觉得无聊的过程。
使用ctypes将是我的第一直觉,尽管我必须承认,如果我测试的C代码一开始不会与Python接口,我只会使用check。Check的强大优势是能够正确地报告segfault的测试用例。这是因为它在一个单独的过程中运行每个测试用例。
现在,如果您要为C代码创建一个python包装器,我只需对包装器进行单元测试。除了上面列出的方法之外,还可以使用Cython用类似python的代码编写这样的包装器,然后从python中对其进行unittest。
我认为确切的解决方案取决于你的代码。并非所有的库都很容易适合包装为DLL。如果是,那么
ctypes
无疑是最简单的方法-只需从库中创建一个DLL,然后用ctypes
进行测试。一个额外的好处是,您现在可以方便地将库包装为一个独立的DLL,这有助于分离应用程序。但是,有时需要在C代码和测试Python代码之间进行更彻底的交互。然后,最好将它作为一个扩展来挂接,对于这个扩展,SWIG是一个非常好的工具,它可以自动处理大多数您会觉得无聊的过程。
使用ctypes将是我的第一直觉,尽管我必须承认,如果我测试的C代码一开始不会与Python接口,我只会使用check。Check的强大优势是能够正确地报告segfault的测试用例。这是因为它在一个单独的过程中运行每个测试用例。
现在,如果您要为C代码创建一个python包装器,我只需对包装器进行单元测试。除了上面列出的方法之外,还可以使用Cython用类似python的代码编写这样的包装器,然后从python中对其进行unittest。
相关问题 更多 >
编程相关推荐