C++单体测试的整个过程
将自己要测试的代码编译之后添加到android模拟器中:
1.设置环境变量
source build/envsetup.sh
2.选择编译版本
lunch
3.编译android源码
make -j8
当android源码编译成功之后,我们就可以使用android模拟器了,即:下次不用编译android源码了
进入相关目录,设置环境变量,lunch,启动模拟器:
emulator -selinux permissive [-logcat -s -show-kernel]
启动模拟器之后,需要重开一个终端,设置环境变量,lunch
make test -j2
编译成功后就是将生成的可执行文件添加到模拟器中运行,具体步骤如下:
adb root
adb remount
adb push test /data
添加成功后,通过
adb shell
进入模拟器,输入编译好的可执行文件test,即可得到执行后的测试结果
打印日志:logcat -s 定义的日志的宏& #&表示让log在后台跑(运行程序的时候,log可以显示出来)
看完日志后,可以killall log名字来关闭该日志进程
将如下内容添加到源码的Android.mk文件中:
utcoverage := yes
ifeq ($(utcoverage), yes)
LOCAL_STATIC_LIBRARIES += libgcov libprofile_rt
LOCAL_CFLAGS += -g3 -o0 -fprofile-arcs -ftest-coverage -Xclang -coverage-cfg-checksum -Xclang -coverage-no-function-names-in-data -Xclang -coverage-version='504*'
LOCAL_CLIKER := -fprofile-arcs -ftest-coverage
endif
然后进行代码的全编(生成.gcno文件)
cd到模拟器的data目录,运行bin文件(生成.gcda文件),adb pull gcda文件,把源文件,.gcno文件,.gcda文件放到同一个目录。(adb push和adb pull命令针对的是模拟器)
从模拟器拉文件的时候,需要先将文件拷贝到data目录下,并且从模拟器中拉取文件时,需要一个一个的拉,因为模拟器中不认识通配符*
find -name "名字"
在所有文件的目录下:
lcov -c -d ./ -o app.info #-c,代表生成覆盖率数据,后面不用给参数;-d表示.gcda所在的目录;-o表示指定生成覆盖率文件的名字
genhtml app.info -o 文件名 #根据信息文件(.info)产生html文档,并输出到一个文件夹中;-o,指定输出的文件夹
如果要查看分支覆盖率情况,需要在配置文件/etc/lcovrc中修改lcov_branch_coverage = 1。