GoogleTest入门

1、编译GoogleTest

2、配置工程

    2.1 创建工程

    2.2 配置GoogleTest

3、运行hello world

    3.1 源码文件

    3.2 CMakeLists.txt文件

    3.3 编译和运行


1、编译GoogleTest

  •   下载googletest:
git clone https://github.com/google/googletest.git
  •   编译:
$ cd googletest
$ cmake -DBUILD_SHARED_LIBS=ON .
$ make

2、配置工程

2.1 创建工程

    整个工程的目录结构如下:

hello
  |--bin
  |--build
  |--include
  |--lib
  |--src
  |    |--***.cpp
  |    |--***.h
  |    |--CMakeLists.txt
  |--test
  |    |--test_***.cpp
  |    |--CMakeLists.txt
  |--CMakeLists.txt
  • bin:这个目录保存编译得到的二进制文件
  • build:这个目录保存编译时的临时文件
  • include:这个目录保存第三方库的头文件
  • lib:这个目录保存第三方库的链接库文件
  • src:这个目录保存源文件和头文件
  • test :这个目录保存单元测试文件、集成测试文件、系统测试文件

2.2 配置GoogleTest

  • 把googletest的头文件复制到hello/include目录中
cp googletest/googlemock/include/* hello/include
cp googletest/googletest/include/* hello/include
  • 把googletest的链接库文件复制到hello/lib文件中
cp googletest/lib/* hello/lib

3、运行hello world

3.1 源码文件

  • src/main.cpp
#include <iostream>
#include <string>
#include <sys/time.h>
#include <unistd.h>

#include "sum.h"

using namespace std;

int main()
{
    std::cout << sum(2, 3) << std::endl;
    return 0;
}
  • src/sum.cpp
#include <iostream>

using namespace std;

int sum(int a, int b)
{
    return a + b;
}
  • src/sum.h
#include <iostream>

using namespace std;

int sum(int a, int b);
  • test/test_sum.cpp
#include <iostream>
#include <gtest/gtest.h>
#include "sum.h"

using namespace std;

TEST(sum, testSum) 
{
	EXPECT_EQ(5, sum(2, 3));	// 求合2+3=5
	EXPECT_NE(3, sum(3, 4));	// 求合3+4 != 3
}

/* 如果在此处不写main函数,那么在链接库的时候还需要链接-lgtest_main, 否则只需链接-lgtest即可。*/
int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

3.2 CMakeLists.txt文件

  • hello/CMakeLists.txt
project(hello)
cmake_minimum_required(VERSION 3.14)
include(CTest)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_CXX_STANDARD 11) # 指定C++11进行编译

add_subdirectory(src)
enable_testing()  #如果要使用ctest,必须在source root directory中调用该函数
add_subdirectory(test)

# TODO 如果有更多的和 src 并列的子目录中,并且其中存在源代码,请把他们也加入进来,否则这些文件不会参与编译
# add_subdirectory( your_new_folder )
  • hello/src/CMakeLists.txt
# 指定include的目录
include_directories(${CMAKE_SOURCE_DIR}/include)

# 指定lib的目录
link_directories(${CMAKE_SOURCE_DIR}/lib)

# 单独编译成一个 lib 库
add_library(lib_sum OBJECT sum.cpp)

# mian.c 编译成一个可执行文件,因为里面包含 main 函数
add_executable(hello main.cpp)

# 最后的可执行文件必须和上面的lib进行链接
target_link_libraries(hello lib_sum)

# 如何增加一个新的源文件,参与编译:
# 1: 新建一个文件,比如 newfile.cpp
# 2: 如果这个文件参与库的编译链接,那么将该文件添加到上面的 add_library() 参数列表的最后
# 3: 如果这个文件只参与最后的编译链接,那么将其添加到上面的 add_executable() 参数列表的最后。

# 如果新文件中要参与最后的 googletest的测试,那么必须添加到 add_library 最后。

# TODO 如何增加一个新的可执行文件 ?
# 1: 在 src 目录下新建一个 .cpp/.c 文件,编辑并且保存;比如叫 newfile.cpp
# 2: 增加一行 add_executable(newfile newfile.cpp)
# 3:  重新执行 cmake build 即可。

# !!注意!!
# 1: 头文件要添加到 include 目录下,如果添加到了其它目录下,务必在这里调用 include_directories
# 2: 如果新增的文件既不被add_library,也不add_executable,那么就不会被编译。
  • hello/test/CMakeLists.txt
add_executable(test_sum test_sum.cpp)

# 指定include的目录
target_include_directories(test_sum PUBLIC ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)

# 指定lib的目录
target_link_directories(test_sum PUBLIC ${CMAKE_SOURCE_DIR}/lib)

target_link_libraries(test_sum lib_sum gtest)

# !!注意!!
# 测试用例的可执行文件的名字必须用 test_ 开始,这样该用例才能够出现在 googleTest 用例树中
# 这个可执行文件并且必须位于 ${workspaceFolder}/bin 目录中,CMake的默认就是输出到这个目录中。

# test_sum 是包含googletest用例的可执行文件,add_test 之后可以被CMake来执行
add_test(NAME test COMMAND test_sum)

# TODO : 如果有更多的其它可执行文件,可以编译仿照上面的过程编译链接之后通过 add_test 加入到CMake的测试列表中来。
# add_test(NAME test_yourName COMMAND test_yourExeProgram)

3.3 编译和运行

# 编译
cd build
cmake ..
make

# 运行
cd ../bin
./hello
./test_sum

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值