代码改变世界

gtest、cmake使用

2016-12-27 00:24  Loull  阅读(4458)  评论(0编辑  收藏  举报

gtest github:

https://github.com/google/googletest

学习:玩转Google开源C++单元测试框架Google Test系列(gtest)(总)

一、安装

 

1、gtest不是传统的unix安装模式(./configure; make; make install)
2、进入 ${GTEST_DIR}

g++ -isystem include -I./ -pthread -c src/gtest-all.cc

ar -rv libgtest.a gtest-all.o

(We need -pthread as Google Test uses threads.)

官方指导:https://github.com/google/googletest/blob/master/googletest/README.md

参考:http://blog.csdn.net/macchan/article/details/17657231#

二、验证是否成功

cd ${GTEST_DIR}/make 会发现这个文件下有个Makefile
make 会生成一些sample执行文件
选一个执行,./sample1_unittest,如果看到典型的gtest输出log就说明成功了

三、使用示例

1、安装与验证完毕之后还不能直接使用
  将${GTEST_DIR}/include/gtest这个目录拷贝到/usr/local/include
  将${GTEST_DIR}/libgtest.a拷贝到/usr/local/lib
  这样就可以直接使用头文件<gtest/gtest.h>和静态库libgtest.a
2、创建~/test目录,然后将${GTEST_DIR}/samples里面的sample1.cc sample1.h sample1_unittest.cc,拷贝过来。
3、写一个Test.cc,代码如下

#include "smaple1.h"
#include <gtest/gtest.h>

int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc,argv);
    RUN_ALL_TESTS():
    return 0;
}

4、编译过程如下
  $g++ -o sample1.o -c sample1.cc
  $g++ -o sample1_unittest.o -c sample1_unittest.cc
  $g++ -o Test.o -c Test.cc
  $g++ -o main sample1.o sample1_unittest.o Test.o -lgtest -lpthread
  由于/usr/local/include被拷贝了gtest目录 /usr/local/lib被拷贝了libgtest.a所以可以
  直接使用<gtest/gtest.h>与-lgtest,另外也需要libpthread.a所以要加-lpthread
5、最后生成可执行文件main,$./main的输出结果与上面的./sample1_unittest一样的结果。

 

四、结合cmake使用gtest

参考:http://stackoverflow.com/questions/33638433/setup-google-test-in-clion

样例:https://github.com/kaizouman/gtest-cmake-example

具体步骤:

1、在已有的工程下创建一个单元测试目录${unit_test}

2、创建${unit_test}/gtest.cpp

#include "gtest/gtest.h"

int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

 

3、创建${unit_test}/test1.cpp

#include <gtest/gtest.h>

TEST(FooTest, Test1) {
    EXPECT_EQ(1, 1);
    EXPECT_TRUE(3 > 0);
}

 

4、创建${unit_test}/CMakeLists.txt

set(EXECUTABLE_OUTPUT_PATH ../build/bin)

include_directories(../include)

add_executable(runUnitTests
        gtest.cpp
        test1.cpp)

target_link_libraries(runUnitTests
        gtest
        pthread)

 

编译运行