C语言单元测试之安装gtest教程及一个简单样例

准备工作

安装包:gtest1.7.0版本(最新的1.8.0版本一直安装失败,1.7.0版本一次成功)

安装链接:百度网盘 https://pan.baidu.com/s/1mDy9sB3sBIMei-IM08SWYw  提取码 5t7f

系统:centos 7.4版本

安装过程

1.进入gtest-1.7.0目录。

2.当前目录打开终端 输入命令 cmake CMakeLists.txt 。

注:如果cmake失败,可能是没有安装cmake,需要输入su命令进入root,然后输入yum install cmake命令。

3.接着输入make命令。

4.可以看到目录下生成了两个文件 libgtest.a 和 libgtest_main.a,.a文件是linux下的静态链接库文件,在windows下是.lib文件。

5.输入su命令进入root。

6.输入命令 cp libgtest*.a  /usr/lib  ,把这两个链接库文件添加到系统路径。

7.输入命令 cp -r include/gtest /usr/include ,把头文件添加到系统路径。

测试

gtest1.7.0目录下的samples目录里面是样例文件,通过它们来测试是否安装成功。

1.进入samples目录。

2.输入命令 g++ sample1.cc sample1_unittest.cc -lgtest -lgtest_main -lpthread -o test1 ,可以看到目录下多了一个名叫test1的文件。

[wanghe@localhost samples]$ g++ sample1.cc sample1_unittest.cc -lgtest -lgtest_main -lpthread -o test1
[wanghe@localhost samples]$ ls
prime_tables.h        sample2_unittest.cc  sample6_unittest.cc
sample10_unittest.cc  sample3-inl.h        sample7_unittest.cc
sample1.cc            sample3_unittest.cc  sample8_unittest.cc
sample1.h             sample4.cc           sample9_unittest.cc
sample1_unittest.cc   sample4.h            test1
sample2.cc            sample4_unittest.cc
sample2.h             sample5_unittest.cc

输入命令 ./test1 执行

[wanghe@localhost samples]$ ./test1 
Running main() from gtest_main.cc
[==========] Running 6 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[ RUN      ] FactorialTest.Zero
[       OK ] FactorialTest.Zero (0 ms)
[ RUN      ] FactorialTest.Positive
[       OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)

[----------] 3 tests from IsPrimeTest
[ RUN      ] IsPrimeTest.Negative
[       OK ] IsPrimeTest.Negative (0 ms)
[ RUN      ] IsPrimeTest.Trivial
[       OK ] IsPrimeTest.Trivial (0 ms)
[ RUN      ] IsPrimeTest.Positive
[       OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)

[----------] Global test environment tear-down
[==========] 6 tests from 2 test cases ran. (0 ms total)
[  PASSED  ] 6 tests.

出现这样的情况证明安装成功,否则会报很多错误!

3.再测试一个,输入命令 g++ sample1.cc sample3-inl.h sample5_unittest.cc -lgtest -lgtest_main -lpthread -o test2 ,会出现一个名叫test2的文件。

[wanghe@localhost samples]$ g++ sample1.cc sample3-inl.h sample5_unittest.cc -lgtest -lgtest_main -lpthread -o test2
[wanghe@localhost samples]$ ls
prime_tables.h        sample2_unittest.cc  sample6_unittest.cc
sample10_unittest.cc  sample3-inl.h        sample7_unittest.cc
sample1.cc            sample3_unittest.cc  sample8_unittest.cc
sample1.h             sample4.cc           sample9_unittest.cc
sample1_unittest.cc   sample4.h            test1
sample2.cc            sample4_unittest.cc  test2
sample2.h             sample5_unittest.cc

输入./test2执行

[wanghe@localhost samples]$ ./test2
Running main() from gtest_main.cc
[==========] Running 4 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 2 tests from IntegerFunctionTest
[ RUN      ] IntegerFunctionTest.Factorial
[       OK ] IntegerFunctionTest.Factorial (0 ms)
[ RUN      ] IntegerFunctionTest.IsPrime
[       OK ] IntegerFunctionTest.IsPrime (0 ms)
[----------] 2 tests from IntegerFunctionTest (0 ms total)

[----------] 2 tests from QueueTest
[ RUN      ] QueueTest.DefaultConstructor
[       OK ] QueueTest.DefaultConstructor (0 ms)
[ RUN      ] QueueTest.Dequeue
[       OK ] QueueTest.Dequeue (0 ms)
[----------] 2 tests from QueueTest (0 ms total)

[----------] Global test environment tear-down
[==========] 4 tests from 2 test cases ran. (0 ms total)
[  PASSED  ] 4 tests.

 

下面编写一个简单样例,文件名为fk.cpp:

#include<iostream>
#include<gtest/gtest.h> 
using namespace std; 

int Abs(int x)
{
    return x > 0 ? x : -x;
}

TEST(IsAbsTest,HandlerTrueReturn)
{
    ASSERT_TRUE(Abs(1) == 1) << "Abs(1)=1"; //ASSERT_TRUE期待结果是true,operator<<输出一些自定义的信息
    ASSERT_TRUE(Abs(-1) == 1) << "Abs(-1)=1";
    ASSERT_FALSE(Abs(-2) == -2); //期待结果是false
    ASSERT_EQ(Abs(1),Abs(-1));
    ASSERT_NE(Abs(-1),0);
    ASSERT_LT(Abs(-1),2);
    ASSERT_GT(Abs(-1),0);
    ASSERT_LE(Abs(-1),2);
    ASSERT_GE(Abs(-1),0);
}

 运行结果:

[wanghe@localhost ~]$ g++ fk.cpp -lgtest -lgtest_main -lpthread -o fk
[wanghe@localhost ~]$ ./fk
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from IsAbsTest
[ RUN      ] IsAbsTest.HandlerTrueReturn
[       OK ] IsAbsTest.HandlerTrueReturn (0 ms)
[----------] 1 test from IsAbsTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

 将第一条语句写成: ASSERT_FALSE(Abs(1) == 1) << “Abs(1)=1”,此时再次测试就会打印出自定义的出错信息了。

[wanghe@localhost ~]$ g++ fk.cpp -lgtest -lgtest_main -lpthread -o fk
[wanghe@localhost ~]$ ./fk
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from IsAbsTest
[ RUN      ] IsAbsTest.HandlerTrueReturn
fk.cpp:12: Failure
Value of: Abs(1) == 1
  Actual: true
Expected: false
Abs(1)=1
[  FAILED  ] IsAbsTest.HandlerTrueReturn (0 ms)
[----------] 1 test from IsAbsTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] IsAbsTest.HandlerTrueReturn

 1 FAILED TEST

总结

至此环境就算搭建好了,安装gtest1.8.0版本的时候怎么都安装不成功,最终选择回退到上一个版本,说明最新的未必是最好的,下一篇开始讲解如何写单元测试。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值