安装包: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
#include
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版本的时候怎么都安装不成功,最终选择回退到上一个版本,说明最新的未必是最好的,下一篇开始讲解如何写单元测试。