gpt4 book ai didi

c - 从一个简单的 c 单元测试开始

转载 作者:IT王子 更新时间:2023-10-29 00:51:30 25 4
gpt4 key购买 nike

我的老板让我为我写的小 c 文件 (foo.c) 编写单元测试。我在网上看了很多关于单元测试的背景,比如只测试一个功能,完全自动化测试,但是我没有找到任何关于如何实现实际单元测试的教程。我尝试了以下方法,但失败了。

    /*foo.c*/
#include foo.h
#if UNIT_TESTING
#define main example_main
#endif

int foo1(...){...}
int foo2(...){...}

int main(int argc,char **argv) {
foo1(...);
foo2(...);
}



/*test_foo.c*/
#include "foo.h"

void main(int argc,char **argv) {

int i = example_main(argc,argv);
return;
}



/*foo.h*/
int example_main(int argc,char **argv);

作为命令我使用:

gcc -Wall -pedantic foo.c test_foo.c -DUNIT_TEST=1 -o test_foo.out

我收到以下错误:

test_foo.c: warning: return type of ‘main’ is not ‘int’
test_foo.c: In function ‘main’:
test_foo.c warning: unused variable ‘i’
/tmp/ccbnW95J.o: In function `main':
test_foo.c: multiple definition of `main'
/tmp/ccIeuSor.o:foo.c:(.text+0x538b): first defined here
/tmp/ccbnW95J.o: In function `main':
test_foo.c:(.text+0x17): undefined reference to `example_main'
collect2: ld returned 1 exit status

我做错了什么?或者您会推荐另一种单元测试方法。

谢谢!

[更新]更正了我的代码中的拼写错误并发布了更新的错误消息

[更新/澄清]我应该使用 cmockery,所以我尝试了 cmockery 网站上的“calculator.c”示例,但无法运行它。在我的阅读中,我的印象是单元测试不依赖于框架。所以我想从一个非常简单的例子开始。 “#if UNIT_TESTING #define main example_main” 来自 cmockry“手册”。

最佳答案

单元测试不仅是编写和运行测试用例,还包括报告。我强烈建议您使用像 cunit 这样的框架。 .除此之外,单元测试最好在构建后运行 continuous integration过程中,以便在开发过程中尽早获得有关中断更改的警告。使用 cunit,您可以生成 XML 报告,这些报告可以在 Web 服务器中进行分析和显示(大多数情况下借助 XSLT)。做自己的怪癖会奏效,但随着您为测试添加越来越多的功能,除非您使用一些既定的框架,否则您将重新发明轮子。

另一条评论:我永远不会混合生产代码和测试代码。使用单独的项目,否则您将难以跟踪源代码存储库中的实际产品更改,并且您的历史记录中会充斥着大量测试更改。

关于c - 从一个简单的 c 单元测试开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com