测试C的框架

Testing Frameworks for C

在去年夏天与Ruby,Rails和RSpec合作之后,我学会了TATFT。 现在我不能在没有先编写测试的情况下编写代码。

我明年将参加C语言的编程课程,我想学习编写C测试驱动。 使用C进行TDD是一个好主意(甚至可能)吗? 如果是这样,有没有与C兼容的良好测试框架?


Is it a good idea (or even possible) to do TDD with C?

是的,与其他语言一样,这显然是一个好主意。但是,由于语言的程序性,它带来了一些更多的困难。

  • 静态功能很快就会受阻。这可以通过包含测试中的源文件,或者在编译生产代码时定义仅表示静态的STATIC宏来解决 - 而不是单元测试

    1
    2
    3
    4
    5
    #if defined(UNIT_TEST)
    #define STATIC
    #else
    #define STATIC static
    #endif
  • 没有孤立:只有一个全局背景。使用OO语言,您可以实例化一个对象(或一组协作对象)来测试它们(它们),您也可以使用模拟对象。
    但是,使用C,您可以通过在单元测试中重新定义函数来覆盖函数。这在类似Unix的系统上工作正常,链接器调用他发现的第一个函数 - 我不确定在Windows上。

If so, are there any good testing
frameworks compatible with C?

你可以从minunit开始。学习曲线是平坦的,因为它只有四个宏长。

编辑:有两个用于C语言的UT框架列表,在其他答案中提到,我没有重复:一个在Wikepedia上,另一个在xprogramming.com上。


我刚刚发现CSpec,它在C中做BDD。看起来不是很成熟,但它让我想起了RSpec。


我们使用来自http://check.sourceforge.net/的"check",它提供了测试套件和测试的基本功能(类似于junit),但相当轻巧。在我喜欢的功能是它处理如果您的测试转储代码并认为失败。

另请注意,"check"是基于"C"的框架而不是"C ++"框架。


这个类似的问题也有很多答案"单元测试C代码"

我使用了RCUNIT,它已经成熟并拥有我需要的一切。我也使用了ipl canata,这很棒,但非常昂贵,所以概率不是你想要的。


如果您实际上正在使用C ++编译器,但是通过编译.c文件在"C"模式下使用它,那么,任何C ++单元测试框架都可以正常工作。

在http://www.xprogramming.com/software.htm上查看xUnit框架的原始列表


C有许多单元测试线束。维基百科有一个比我在这里组装的更好的列表。


以下是c的单元测试框架列表:
http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

好好享受!


你当然可以在C(我这样做)进行单元测试。我使用的框架(对于Windows平台)是CunitWin32


所以一个合适的C程序员会告诉你,因为C是静态类型的,它会捕获你可能拥有的所有错误,因此你不需要单元测试框架。

它们充满了糟糕,但这是像C这样的静态类型语言的论据。

我认为你应该采用Adobe用Photoshop做的方法。用C编写一系列核心库,然后应用程序的所有粘合和实际逻辑都应该是更高级的语言。 Photoshop主要用Lua编写,但许多语言都适用于此。