本篇博文主要讲解如何使用cmake的ctest结合google test进行单元测试。
前置说明:
- ctest本身并不能进行单元测试,需要结合测试框架如gtest,当然也可以结合其它的测试框架或者自己进行实现。
- 需要先安装gtest的库,可以使用brew安装获取自行编译
自行编译流程
- 克隆google test仓库
cd googletestmkdir build && cd buildcmake ..makemake install
第6步可能权限不够
项目结构说明:
- cpp_test
- CMakeLists.txt
- ctests
- CMakeLists.txt
- text.cpp
- src
- include
- calculate.h
- source
- calculate.cpp
- main.cpp
- include
- build
代码详情:
文件路径:CMakeLists.txt
cmake_minimum_required(VERSION 3.5.0)
project(gtest VERSION 0.1.0 LANGUAGES C CXX)
add_subdirectory(tests)
add_executable(gtest_main
src/main.cpp
src/include/calculate.h
src/source/calculate.cpp
文件路径:src/include/calculate.h
#ifndef CALCUATE_H_
#define CALCUATE_H_
template<class T>
T add(T a,T b){
return a + b;
}
template<class T>
T sub(T a,T b){
return a - b;
}
#endif
文件路径:tests/CMakeLists.txt
cmake_minimum_required(VERSION 3.5.0)
add_executable(tests test.cpp)
#链接测试库
find_package(GTEST REQUIRED)
target_link_libraries(tests GTest::GTest GTest::Main)
add_test(NAME tests COMMAND tests)
文件路径:tests/tests.cpp
#include "../src/include/calculate.h"
#include <gtest/gtest.h>
TEST(calculate,add){
EXPECT_EQ(add(1,2),5);
}
int main(int argc,char * argv[]){
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
文件路径:main.cpp
int main(){
return 0;
}
然后我们前往build目录
- 执行
cmake .. - 执行
make - cd 到 测试可执行文件目录
cd tests - 执行测试命令
./tests - 查看执行结果
本篇完结