今年夏天,我开发了一个用纯c语言编写的嵌入式系统。这是我所在公司接管的一个现有项目。我已经非常习惯使用JUnit在Java中编写单元测试,但不知道为现有代码(需要重构)和添加到系统中的新代码编写单元测试的最佳方法是什么。

有什么项目可以让单元测试纯C代码像使用JUnit测试Java代码一样简单吗?任何特别适用于嵌入式开发(交叉编译到arm-linux平台)的见解都将非常感谢。


当前回答

作为一个C语言新手,我发现名为“C测试驱动开发”的幻灯片非常有用。基本上,它使用标准assert()和&&来传递消息,没有任何外部依赖。如果有人习惯了全栈测试框架,这可能就不适用了:)

其他回答

使用的一种技术是使用c++ xUnit框架(和c++编译器)开发单元测试代码,同时将目标系统的源代码维护为C模块。

确保在交叉编译器下定期编译C源代码,如果可能的话自动使用单元测试。

您可能还想看看libtap,这是一个输出任何测试协议(TAP)的C测试框架,因此可以很好地与用于该技术的各种工具集成。它主要用于动态语言领域,但它易于使用,并且变得非常流行。

一个例子:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

在阅读Minunit之后,我认为更好的方法是在assert宏中进行测试,我使用了很多防御程序技术。所以我使用Minunit混合标准断言的相同思想。您可以在k0ga的博客中看到我的框架(一个好名字可以是NoMinunit)

除了我明显的偏见

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

是一个很好的简单的方法来单元测试C代码。模仿xUnit

这是CUnit

嵌入式单元是嵌入式C系统的单元测试框架。它的设计抄袭了JUnit和CUnit等,然后为嵌入式C系统做了一些调整。嵌入式单元不需要标准C库。所有对象都分配到const区域。

Tessy自动化了嵌入式软件的单元测试。