加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从c中的简单单元测试开始

发布时间:2020-12-16 10:27:47 所属栏目:百科 来源:网络整理
导读:我的老板告诉我为我写的小c文件(foo.c)编写单元测试.我在网上看了很多关于单元测试的背景知识,比如只测试一个函数并使测试完全自动化,但我没有找到任何关于如何实现实际单元测试的教程.我尝试了以下方法,但失败了. /*foo.c*/ #include foo.h #if UNIT_TESTIN
我的老板告诉我为我写的小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);

作为cmd,我使用:

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’manual’.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读