Gcov单元测试覆盖率
来源:互联网 发布:慈溪行知职高 编辑:程序博客网 时间:2024/04/30 22:13
在C的世界中,可以用gcov工具计算覆盖率,它会运动每一个单元测试,然后统计代码每一行的执行情况,gcov是最初用来测试linux内核的覆盖率的,是一个命令行工具。可以用lcov,它在gcov的基础上增加了GUI支持。
1 安装lcov
# wgethttp://downloads.sourceforge.net/ltp/lcov-1.9.tar.gz
# tar -zxvf lcov-1.9.tar.gz
# cd lcov-1.9
# make install
2 分步运行一个例子
test.c的代码如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
int i = 0;
printf("Begin Test...\n");
if (1 == argc) {
printf("argc == 1\n");
} else {
printf("argc != 1\n");
for (i = 0; i < argc; i++)
printf("%d\tof\t%d\n", i+1, argc);
}
printf("End Test!\n");
}
第一步:编译时要添加-fprofile-arcs-ftest-coverage参数:
gcc test.c -fprofile-arcs -ftest-coverage -o test
第二步:运行测试用例:
[hua@zhanghua test]$ ./test 1 2 3 4
Begin Test...
argc != 1
1 of 5
2 of 5
3 of 5
4 of 5
5 of 5
End Test!
第三步:上一步已经生成了统计数据,但不容易看, 现在使用lcov收集统计数据做成图形化显示的。
lcov --capture --directory . --output-file test.info--test-name test
lcov –zerocounters (计算器清零)
第四步:生成html网页:
genhtml test.info --output-directory output --title "asimple test" --show-details --legend
3 运行lcov自带例子
自带例子位于:$lcov/example目录下,如下:
[hua@zhanghua example]$ ll /bak/xue/unittest/lcov-1.9/example/
total 28
-rw------- 1 hua hua 316 Aug 6 2010 descriptions.txt
-rw------- 1 hua hua 1439 Aug 6 2010 example.c
-rw------- 1 hua hua 108 Aug 6 2010 gauss.h
-rw------- 1 hua hua 118 Aug 6 2010 iterate.h
-rw------- 1 hua hua 2482 Aug 6 2010 Makefile
drwx------ 2 hua hua 4096 Aug 6 2010 methods
-rw------- 1 hua hua 156 Aug 6 2010 README
查看README文件,可以知道通过下列命令运行例子:
make output
4 与Makefile集成
在编译阶段需要加入2个编译选项,如下
l编译的时候,增加-fprofile-arcs-ftest-coverage或者--coverage;
l链接的时候,增加-ftest-coverage或者–lgcov;
l建议打开–g3选项,去掉-O2以上级别的代码优化选项;
一点需要注意的是,上述几个选项的使用不能影响到正常的编译过程,否则会极大地影响程序的运行效率。建议使用makefile参数或者scons的编译参数来编译,
ifeq($(coverage), yes)
CXXFLAGS+= -fprofile-arcs -ftest-coverage
LINKERCXX+= -fprofile-arcs -ftest-coverage
OPT_FLAGS= -g
endif
这样,可以使用makecoverage=yes check来引入这些编译选项而不会影响到正常的编译。
if ENABLE_COV
cov-reset:
@rm -fr coverage
@find . -name "*.gcda" -exec rm {} \;
@lcov --directory . --zerocounters
cov-report:
@mkdir -p coverage
@lcov --compat-libtool --directory . --capture --output-file coverage/app.info
@genhtml -o coverage/ coverage/app.info
cov:
@make cov-report
clean-local:
@make cov-reset
check:
@make cov
endif
(makefile里面可以加在CFLAGS和LDFLAGS上),如果连接的时候出现undefinedreference to `__gcov_init'错误,则还要加上-lgocv,编译成功后运行编译好的程序,然后退出程序。
Glib集成gcov的一个例子:
http://code.google.com/p/google-highly-open-participation-gnome/issues/detail?id=37
5 用googletest写单元测试
Googletest简称gtest
Googletesthttp://code.google.com/p/googletest/
玩转Google开源C++单元测试框架GoogleTest系列(gtest)(总)
http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
- Gcov单元测试覆盖率
- Gcov单元测试覆盖率 ( by quqi99 )
- gcov覆盖率测试
- gcov覆盖率测试
- gcov代码覆盖率使用gcov完成代码覆盖率的测试
- 利用gcov测试代码覆盖率
- 代码覆盖率分析(gcov)
- 利用gcov测试代码覆盖率
- 代码覆盖率测试工具gcov
- gcov lcov覆盖率统计工具
- 代码覆盖率测试,gcov, lcov
- 代码覆盖率测试工具gcov
- 关于覆盖率GCOV(LCOV)
- 用gcov来测试代码覆盖率
- GCOV查看arm-linux代码覆盖率
- 使用gcov提高代码测试覆盖率
- 使用gcov完成代码覆盖率的测试
- gcov/lcov查看代码运行覆盖率
- Power of Cryptography 数学题 注意double能表示的最大范围
- Perl For Window
- ARM状态和Thumb状态间的切换
- Factstone Benchmark hoj 数学题
- eXosip入门(二):osip库的验证
- Gcov单元测试覆盖率
- PHP常用开发函数解析之数组篇
- 线程的同步
- SIP入门(一):建立SIP软电话环境
- android书架效果
- file_cp0.c
- jq
- C++学习推荐书目
- count color