C的unit testing框架

可能重复:
unit testingC代码

我已经看到了一些特定于C ++的问题,但我真的好奇C.我正在尝试在我们的构建环境中添加一个标准的unit testing框架。 我的主要目标是鼓励我们的开发人员编写unit testing,并将这些测试标准化,以便其他人可以运行它们。 理想情况下,我想将unit testing作为我们每晚构建的一部分。

我们开始使用CUnit进行一些工作,除了一切都在一个线程中运行并且任何内存故障导致unit testing停止运行之外,它起作用了,这很烦人。 我还发现编写测试非常困难,但这可能只是对您进行unit testing。

有人知道好的替代品吗? 有没有人对使用C-only代码的C ++unit testing人员有任何经验?

我使用C编写嵌入式软件,我决定编写自己的框架。 它非常简单并且为MS Visual Studio编写。 它很容易移植到其他平台。

http://code.google.com/p/cunitwin32/

如果您的目标是Linux,我认为Check可能满足您的需求。

如果您的目标是Win32平台或NT内核模式,您应该看一下cfix 。

我们开始使用CUnit进行一些工作,除了一切都在一个线程中运行并且任何内存故障导致unit testing停止运行之外,它起作用了,这很烦人。

有一个Cunit testing框架,它在一个单独的进程中分叉和执行每个测试用例,以便即使存在核心转储的测试也执行所有测试: 检查

但是,我担心所有这些叉子带来的性能损失(说实话,我没试过)。 但是我不会长期使用任何单个测试核心转储:我通常会立即修复它。

防止unit testing核心的一个技巧是断言保护 ,例如:使用断言来防止使用NULL指针(使用minunit的示例)。

void test_function_returning_a_pointer(void) { struct_t *theStruct = function_returning_a_pointer(); MU_ASSERT(theStruct != NULL); //--- now you can use the pointer MU_ASSERT(theStruct->field1 == 0); return MU_PASSED; } 

顺便说一下,我不知道任何C ++unit testing框架在分段违规的情况下不会崩溃。

我还发现编写测试非常困难,但这可能只是对您进行unit testing。

你能详细说明你的困难吗? 您是否尝试将遗留代码置于测试之下?