当前开发环境中,无法把测试代码提交到仓库,所以单测另起一个目录
.
├── gtest
│ ├── CMakeLists.txt # 这是最外层的cmake,用以管理所有内部的cmake
│ └── sample_test # 这是sample_src对应的测试用例,该目录下有一个单独的cmake
│ ├── CMakeLists.txt
│ └── sample_test.cpp
└── repo #这里存储一些代码仓库,下面以sample_src为例子 └── sample_src
最外层cmake:
cmake_minimum_required(VERSION 3.10)
project(MyProject)set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)enable_testing()include_directories(${CMAKE_SOURCE_DIR})# 子模块,如果有新增直接在这里添加即可
add_subdirectory(sample_test)
sample_test目录下的cmake:
# 寻找系统中安装的gtest,我用的ubuntu用apt直接安装的gtest库
find_package(GTest REQUIRED)# 源代码和测试代码
set(SRC ${CMAKE_SOURCE_DIR}/../repo/sample_src/sample.cpp${CMAKE_SOURCE_DIR}/sample_test/sample_test.cpp
)include_directories(${CMAKE_SOURCE_DIR}/../repo)add_executable(sample_test ${SRC})# 链接gtest
target_link_libraries(sample_test ${GTEST_LIBRARIES} pthread)
sample_test/sample_test.cpp
代码
#include "sample_src/sample.h"#include <gtest/gtest.h>TEST( AddTest, HandlesPositiveInput ) {EXPECT_EQ( add( 1, 2 ), 3 );EXPECT_EQ( add( 10, 20 ), 30 );
}TEST( AddTest, HandlesNegativeInput ) {EXPECT_EQ( add( -1, -1 ), -2 );EXPECT_EQ( add( -10, -20 ), -30 );
}// main函数就直接放在这里
int main( int argc, char** argv ) {::testing::InitGoogleTest( &argc, argv );return RUN_ALL_TESTS();
}
两个被测代码文件
sample_src/sample.h
:
#pragma once
int add( int a, int b );
sample_src/sample.cpp
:
#include "sample_src/sample.h"
int add( int a, int b ) {return a + b;
}
编译之后的样子:
$ ll
总计 40K
-rw-rw-r-- 1 kun kun 15K 12月 20 20:45 CMakeCache.txt
drwxrwxr-x 5 kun kun 4.0K 12月 20 20:45 CMakeFiles
-rw-rw-r-- 1 kun kun 1.8K 12月 20 20:45 cmake_install.cmake
-rw-rw-r-- 1 kun kun 290 12月 20 20:45 CTestTestfile.cmake
-rw-rw-r-- 1 kun kun 4.7K 12月 20 20:45 Makefile
drwxrwxr-x 3 kun kun 4.0K 12月 20 20:45 sample_test
执行结果