4

去年夏天用 Ruby、Rails 和 RSpec 做了一些工作后,我学会了TATFT。现在,如果不先编写测试,我就无法编写代码。

我明年要上C的编程课程,我想学习编写C测试驱动。用 C 做 TDD 是个好主意(甚至可能)吗?如果是这样,是否有任何与 C 兼容的良好测试框架?

4

9 回答 9

7

用 C 做 TDD 是个好主意(甚至可能)吗?

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

  • 静态函数很快就会成为障碍。这可以通过包含被测源文件或定义一个静态宏来解决,该宏仅在编译生产代码时表示静态 - 而不是单元测试

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

如果是这样,是否有任何与 C 兼容的良好测试框架?

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

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

于 2009-01-14T14:36:48.880 回答
2

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

另请注意,“检查”是基于“C”的框架,而不是“C++”框架。

于 2009-01-12T22:29:10.113 回答
2

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

于 2009-01-13T16:04:02.403 回答
1

有许多用于 C 的单元测试工具。 Wikipedia 的列表比我在此处组装的要好得多。

于 2009-01-12T22:25:24.380 回答
1

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

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

于 2009-01-12T22:50:47.497 回答
1

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

我用过RCUNIT,它很成熟,有我需要的一切。我还使用了 ipl canata,它很棒,但非常昂贵,所以这可能不是你想要的。

于 2009-01-16T05:45:24.613 回答
0

你当然可以用 C 语言进行单元测试(我愿意)。我使用的框架(用于 Windows 平台)是CunitWin32

于 2009-02-12T21:58:40.743 回答
0

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

好好享受!

于 2011-08-09T03:03:02.473 回答
-1

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

它们充满了狗屎,但这就是像 C 这样的静态类型语言的论点。

我认为您可能应该采用 Adob​​e 对 Photoshop 所做的方法。用 C 编写一系列核心库,然后应用程序的所有粘合和真实逻辑都应该使用更高级别的语言。Photoshop 主要是用 Lua 编写的,但许多语言都适用于此。

于 2009-01-13T00:37:20.463 回答