GoogleTest Unit test C++单元测试,简单使用及生成覆盖率html,branches未产生解决

Step1.首先下载安装google test
对于ubuntu系统,可直接从软件源里下载更新libgtest-dev
或者 sudo apt-get install libgtest-dev
这样会自动把googtest的头文件安装到/usr/include/gtest目录下,而源文件在/usr/src/gtest目录下


也可以自己从https://googletest.googlecode.com上下载gtest的最新版本,不过google code网站经常被墙,到时候可以考虑从别的地方下载。
比如对于1.6.0版本,wget gtest-1.6.0.zip https://googletest.googlecode.com/files/gtest-1.6.0.zip
然后解压:
假定下载到根目录下,直接:
user@linux-name:~$ unzip gtest-1.6.0.zip
user@linux-name:~$ cd gtest-1.6.0


另外,把下载的gtest源代码下面的include/gtest目录拷贝到全局头文件目录,如:


user@linux-name:~/gtest-1.6.0$ cp -r include/gtest/ /usr/local/include/

user@linux-name:~/gtest-1.6.0$ cp -r include/gtest/ /usr/include/
然后在用到gtest的文件中,用#include <gtest/gtest.h>指令就可以让编译器找到gtest的头文件了。


Step2.编译gtest的链接库,因为原则上这个链接库是不能下载的,最好本地编译一份用:


执行
user@linux-name:~/gtest-1.6.0$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ./src/gtest-all.cc
会在当前目录产生gtest-all.o


${GTEST_DIR}表示Gtest源文件路径,这里如果当前目录就是源文件路径,${GTEST_DIR}用"./"
-I指定的两个搜索路径可以去掉,因为所需要的头文件都已经放到系统的include下和当前路径下了。 (g++ ./src/gtest-all.cc )


然后


~/gtest-1.6.0$ g++ -I./include -I./ -c ./src/gtest_main.cc


会在当前目录产生gtest_main.o,这个不是必须的,这里面包含了gtest代码里提供的一个默认的main函数(执行RUN_ALL_TESTS()),所以链接到自己写的测试函数里,可以不用在test文件里写main函数,如有特殊需要,还是得自己写main函数。


然后把两个编译输出文件合并成一个静态库libgtest.a,可以拿出来,便于放到以后的gtest工程下链接用。
~/gtest-1.6.0$ ar -rv libgtest.a gtest-all.o gtest_main.o


 

然后开始尝试写第一个测试,这里就是和普通的linux C++开发步骤一样。我们可以用gtest里提供的sample来实验,也可以自己写一个很简单的测试。

 

sample.h

  1. //sample.h
  2. #pragma once
  3. int fun(int a, int b);

 

sample.cpp

  1. #include"sample.h"
  2. int fun(int a, int b) 
  3.     return (a-b); 

 

test.cpp这里我们用了四种ASSERTION(断言)方法,给初学者一个印象,具体gtest的各种断言用法还要参考gtest文档
 

  1. #include "gtest\gtest.h" 
  2. #include "sample.h"
  3.   
  4.  //TEST (gtest macro),fun:function name to test, "case1" test case name
  5. TEST(fun, case1) 
  6.         EXPECT_LT(-2, fun(1, 2));
  7.        EXPECT_EQ(-1, fun(1, 2)); 
  8.        ASSERT_LT(-2, fun(1, 2));
  9.        ASSERT_EQ(-1, fun(1, 2)); 
  10.   
  11. /*
  12. int _tmain(int argc, _TCHAR* argv[]) 
  13.     testing::InitGoogleTest(&argc, argv); 
  14.     return RUN_ALL_TESTS(); 
  15. }
  16. */





Step3. 编译要测试的代码(假设文件名为sample.cpp)


g++ -c sample.cpp


 
Step4. 编译单元测试的代码(假设文件名为test.cpp)


g++ -c test.cpp


 
Step5.
libgtest.a或其他需要的库链接、生成可执行程序


g++ test.o sample.o libgtest.a -o test -lpthread


-lpthread是必须要有的,否则链接时会出错gtest-all.cc:(.text._ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv[_ZNK7testing8internal11ThreadLocalIPNS_31TestPartResultReporterInterfaceEE16GetOrCreateValueEv]+0x7a): undefined reference to `pthread_setspecific'


Step6. 运行生成的test文件,可输出测试结果。
 

goldwyn@goldwyn-VirtualBox:~/unittest/gtest_example2$ ./test

Running main() from ./src/gtest_main.cc

[==========] Running 1 test from 1 test case.

[----------] Global test environment set-up.

[----------] 1 test from fun

[ RUN      ] fun.case1

[       OK ] fun.case1 (0 ms)

[----------] 1 test from fun (0 ms total)

 

[----------] Global test environment tear-down

[==========] 1 test from 1 test case ran. (1 ms total)

[  PASSED  ] 1 test.

goldwyn@goldwyn-VirtualBox:~/unittest/gtest_example2$

 

 

step7生成覆盖率html文件

  g++ -fprofile-arcs -ftest-coverage -c sample.cpp       ----产生中间文件sample.gcno

  g++ -fprofile-arcs -ftest-coverage test.o sample.o libgtest.a -o test -lpthread   ----重新生成test

  ./test   -----运行test ,产生sample.gcda文件

lcov --directory . --capture --output-file app.info   ----产生中间html中间文件app.info

genhtml -o results app.info   -----生成result文件夹,index.html打开可以看到覆盖率统计

 

注意:一开始的时候,生成的报告,只有 line和functions的统计,没有branches的统计。

修改:/etc/lcovrc文件

lcov_branch_coverage=1

genhtml_branch_coverage=1

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jest 是一个流行的 JavaScript 测试框架,可以用于编写单元测试、集成测试和端到端测试。下面是 Jest 单元测试入门的步骤: 1. 安装 Jest 使用 npm 安装 Jest:`npm install --save-dev jest` 2. 编写测试用例 在项目根目录下创建一个名为 `__tests__` 的文件夹,并在其中创建一个名为 `example.test.js` 的文件。在 `example.test.js` 文件中编写测试用例: ```javascript describe('示例测试', () => { test('测试1', () => { expect(1 + 1).toBe(2); }); test('测试2', () => { expect(true).toBeTruthy(); }); }); ``` 上面的代码定义了一个测试套件 `示例测试`,其中包含两个测试用例 `测试1` 和 `测试2`。每个测试用例都是一个函数,其中包含一个或多个 `expect` 语句,用于断言测试结果是否符合预期。 3. 运行测试 在命令行中输入 `npx jest` 命令,Jest 将自动查找项目中的测试用例并运行它们。如果所有测试用例都通过,Jest 将输出一个绿色的提示。 4. 高级配置 Jest 提供了丰富的配置选项,可以用于定制测试过程。例如,可以在 `package.json` 文件中添加以下配置: ```json { "jest": { "testEnvironment": "node", "testMatch": [ "**/__tests__/**/*.test.js" ], "coverageThreshold": { "global": { "branches": 80, "functions": 80, "lines": 80, "statements": 80 } } } } ``` 上面的配置指定了测试环境为 Node.js,测试文件必须位于 `__tests__` 文件夹中,并以 `.test.js` 结尾。还指定了代码覆盖率的阈值,如果代码覆盖率低于指定的阈值,Jest 将会提示测试失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值