C的单元测试框架

Unit Testing Frameworks for C

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Unit Testing C Code

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

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

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


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

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

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


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


We started some work with CUnit, which worked except that everything ran in one thread and any memory faults caused the unit tests to stop running, which was rather annoying.

有一个C单元测试框架在一个单独的进程中分叉和执行每个测试用例,以便即使在核心转储的测试存在的情况下也执行所有测试:
校验

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

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

1
2
3
4
5
6
7
8
9
10
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 ++单元测试框架在分段违规的情况下不会崩溃。

I also found it incredibly difficult to write the tests, but that might just be unit testing for you.

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