gtest是一个跨平台的C++单元测试框架。
Android下使用gtest单元测试。
1编译
- cd LINUX/android
- source build/envsetup.sh
- lunch
- make
- ps:/LINUX/android/external/googletest(确保这个模块能编译)
2创建测试目录gtestdemo,目录结构为:
## [Android.mk] 结构如下:
#####################################
LOCAL_PATH := $(call my-dir)
PRJ_INC_PATH += $(LOCAL_PATH)/xxx // 1这是源代码头文件目录,当前目录为创建的test目录
include $(CLEAR_VARS)
LOCAL_MODULE := xxxtest // 2自定义的可执行程序文件名
LOCAL_SRC_FILES := test/test_case.cpp
LOCAL_SRC_FILES += cpp/mtest.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/xxx // 3同注释1
LOCAL_STATIC_LIBRARIES := libgtest // *必写项
LOCAL_CFLAGS := --coverage // *必写项
LOCAL_LDFLAGS := --coverage // *必写项
include $(BUILD_EXECUTABLE)
## [Application.mk] 结构如下:
#####################################
APP_STL := c++_static
APP_OPTIM := debug
## [mtest.h] 结构如下:
#####################################
#ifndef MYGTESTAPPLICATION_MTEST_H
#define MYGTESTAPPLICATION_MTEST_H
int myTest(int intValue);
#endif //MYGTESTAPPLICATION_MTEST_H
## [mtest.cpp] 结构如下:
#####################################
#include "mtest.h"
int myTest(int intValue)
{
if (intValue > 255) {
return 255;
} else if (intValue < 100) {
return 0;
}
return intValue;
}
## [test_case.cpp] 结构如下:
#####################################
#include <gtest/gtest.h>
#include "cpp/mtest.h"
TEST(MYTEST, 1)
{
EXPECT_EQ(myTest(10), 0);
}
TEST(MYTEST, 2)
{
EXPECT_EQ(myTest(150), 150);
}
TEST(MYTEST, 3)
{
EXPECT_EQ(myTest(300), 255);
}
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
3编译gtestdemo
- mmm xxx/xxx/gtestdemo/
生成目录为
[100% 10/10] Install: out/target/product/yebisu/system/bin/xxxtest(对应于.mk的local_module)
#### build completed successfully (42 seconds) ####
4将生成的可执行文件 push 进车载机,执行命令如下
- adb root
- adb remount
- adb push out/target/product/yebisu/system/bin/xxxtest /data (推进车机/data 目录下)
- adb shell /data/xxxtest (执行test)
- adb pull /out/target/product/yebisu/obj/EXECUTABLES/xxxtest_intermediates out/target/product/yebisu/obj/EXECUTABLES/xxxtest_intermediates (推出车机)
- ps:如果不是首次执行需要在adb shell /data/xxxest 前执行 adb shell rm -rf /out/target/product/yebisu/obj/EXECUTABLES/xxxtest_intermediates
5生成*.info文件
前提:{
1)进入本地计算机的/usr/bin目录,新建 llvm-cov.sh 文件,
sudo vi llvm-cov.sh 输入如下内容:
#!/bin/bash
exec xxx/LINUX/android/prebuilts/clang/host/linux-x86/clang-4691093/bin/llvm-cov gcov "$@"
注:上面语句中的空格 不可以省略。给 llvm-cov.sh 文件执行权限(chmod +x llvm-cov.sh)。
2)下载lcov源码。下载lcov:http://ltp.sourceforge.net/coverage/lcov.php,有rpm包和源码包。(以源码包为例)
解压lcov-x.xx.tar.gz,进入源码包,执行vi bin/geninfo
找到 [our $gcov_tool = "gcov";] 这一行,将双引号后面的内容替换为 "llvm-cov.sh" 保存退出。
执行 sudo make install
}//第一次的时候需要
进入/home/your-mobis-code-dir/LINUX/android/out/target/product/yebisu/obj/EXECUTABLES/*可执行程序文件名称*_intermediates 目录
执行生成*.info文件命令:
sudo lcov -d . -t *name* -o *name.info* -b . -c
例如:sudo lcov -d . -t myinfo -o myinfo.info -b . -c
6生成html文件
执行命令 genhtml -o result *.info。
例如: genhtml -o result myinfo.info
7打开result文件夹中的index.html
可以得到我们的测试通过率。
最后分享一个gtest的详细使用链接:点我