C的单元测试框架[重复]

Posted

技术标签:

【中文标题】C的单元测试框架[重复]【英文标题】:Unit Testing Frameworks for C [duplicate] 【发布时间】:2010-09-15 16:33:08 【问题描述】:

可能重复:Unit Testing C Code

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

我们开始使用 CUnit 进行一些工作,除了所有内容都在一个线程中运行并且任何内存错误都会导致单元测试停止运行,这很烦人。我还发现编写测试非常困难,但对你来说可能只是单元测试。

有人知道好的替代品吗?有没有人有过使用纯 C 代码的 C++ 单元测试器的经验?

【问题讨论】:

请参阅 [此处][1] 以获得您的答案。 (重复)[1]:***.com/questions/65820/unit-testing-c-code 【参考方案1】:

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

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

如果您的目标是 linux,我认为 Check 可能适合您的需求。

【讨论】:

P.S.它优雅地处理内存访问冲突等(我也在自动化环境中使用它) 根据 Check 网站(截至 2021 年 9 月 1 日),MSVC 甚至支持 Check。所以我猜这些年来支持平台方面的情况有所改善。【参考方案2】:

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

【讨论】:

【参考方案3】:

我们开始使用 CUnit 进行一些工作,除了所有内容都在一个线程中运行并且任何内存错误都会导致单元测试停止运行,这很烦人。

有一个 C 单元测试框架,它在一个单独的进程中分叉和执行每个测试用例,因此即使存在核心转储的测试,所有测试也会被执行: Check

但是,我担心所有这些分叉带来的性能损失(老实说,我没有尝试过)。但是我不会忍受任何单一的测试核心转储:我通常会立即修复它。

防止单元测试进入核心的一个技巧是assertion guard,例如:使用断言来防止使用空指针(例如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++ 单元测试框架在违反分段时不会崩溃。

我还发现编写测试非常困难,但对你来说这可能只是单元测试。

你能详细说明你的困难吗?您是否尝试对遗留代码进行测试?

【讨论】:

以上是关于C的单元测试框架[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C的单元测试框架[关闭]

C ++单元测试框架的比较[关闭]

在 Windows 上使用哪个单元测试框架进行 C 开发? [关闭]

Keil中搭建自动化单元测试框架Unity

第六章:单元测试框架unittest

单元测试的测试工具