【问题标题】:Is it possible to use Python based Unit Test frameworks and runners, to test C Code是否可以使用基于 Python 的单元测试框架和运行器来测试 C 代码
【发布时间】:2011-10-04 18:08:43
【问题描述】:

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

【问题讨论】:

    标签: python c unit-testing


    【解决方案1】:

    当然可以....但是您必须编写一个绑定以在 python 中调用您的 C 代码(例如 ctypes),并在 python 中编写测试(这确实可行且简单进行智能测试的方法)

    示例:

    • 编写一个虚拟 C 库。

    foolib.c

    int my_sum(int , int);
    
    int my_sum(int a , int b);
    {
        return a + b;
    }
    
    • 将其编译为共享库:

    gcc -shared -Wl,-soname,foolib -o foolib.so -fPIC foolib.c

    • 用 ctypes 编写包装器:

    foolib_test.py

    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))
    

    然后,当你用鼻子运行这个测试时,你应该对你的 C 代码有一个很好的测试:)

    【讨论】:

    • 能否请您详细说明或给我一个示例,让我了解这将是多么复杂。谢谢
    • 如果这是简单的 C 文件,比如 adder 或 hello world,我相信这种方法会奏效,如果这是遗留代码并且一个文件有很多依赖项 m 并且一个模块需要另一个模块怎么办,这将如何工作?
    • @kamal : 对于复杂代码,最困难的部分是 makefile 部分 :)
    • 关于上述示例的两个小问题。一个是int my_sum(int a, int b)第二次写入后不应有分号,还有self.failUnlessEqual(4, self.foolib.my_sum(2,2))(注意self.failUnlessEqual
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多