是否可以使用基于Python的单元测试框架和运行程序来测试C代码

是否可以使用基于Python的单元测试框架和运行程序来测试C代码,python,c,unit-testing,Python,C,Unit Testing,基于Python的单元测试框架,比如“nose”,有很多丰富的特性,我想知道我们是否可以利用它们来测试C代码。当然可以。。。。但是,您必须编写一个绑定来用python调用您的C代码(例如,使用),并用python编写测试(这确实是可行的,也是一种简单的智能测试方法) 示例: 编写一个虚拟C库 B.c 将其编译为共享库: gcc-shared-Wl、-soname、oundib-o-oundib.so-fPIC-oundib.c 使用ctypes编写包装器: 傻瓜式测试 然后,当使用n

基于Python的单元测试框架,比如“nose”,有很多丰富的特性,我想知道我们是否可以利用它们来测试C代码。

当然可以。。。。但是,您必须编写一个绑定来用python调用您的C代码(例如,使用),并用python编写测试(这确实是可行的,也是一种简单的智能测试方法)

示例:

  • 编写一个虚拟C库
B.c

  • 将其编译为共享库:
gcc-shared-Wl、-soname、oundib-o-oundib.so-fPIC-oundib.c

  • 使用ctypes编写包装器:
傻瓜式测试


然后,当使用nose运行此测试时,您应该对您的C代码进行一次很好的测试:)

请您详细说明或给我一个示例,让我了解这有多复杂。感谢如果这是简单的C文件,比如加法器,或者hello world,我相信这种方法会奏效,如果这是遗留代码,一个文件有很多依赖项,那么一个模块需要另一个模块,这将如何工作?@kamal:对于复杂代码来说,最困难的部分是makefile部分:)关于上述示例的两个小注释。其一是
intmy_sum(inta,intb)
在第二次写入时不应在其后面加分号,而且
self.failUnlessEqual(4,self.doulib.my_sum(2,2))
(注意
self.failUnlessEqual
int my_sum(int , int);

int my_sum(int a , int b);
{
    return a + b;
}
import ctypes
import unittest

class FooLibTestCase(unittest.TestCase):
    def setUp(self):
        self.foolib = ctypes.CDLL('/full/path/to/foolib.so')

    def test_01a(self):
        """ Test in an easy way"""
        self.failUnlessEqual(4, foolib.my_sum(2, 2))