编写简单的单元测试
项目目录如下:
- 从上到下第一个文件
CMakeLists.txt
是主文件。内容如下:
cmake_minimum_required(VERSION 3.14)
project(main)
include_directories(include) # 包含函数头文件,通常需要将函数头文件和函数实现分开放置
add_subdirectory(src) # 添加函数实现,函数实现中需要CMakeLists说明函数如何编译
add_subdirectory(test) #测试代码目录,如何测试在次目录下说明
add_executable(main main.cpp) #主程序
enable_testing() # 开启单元测试,make test
target_link_libraries(main add) # 主程序编译的代码(和测试代码分开编译)。
- include目录下只包含一个简单的头文件
add.h
:
#ifndef ADD_H
#define ADD_H
int add(int a, int b);
#endif
main.cpp
内容如下:
#include "add.h"
#include <iostream>
using namespace std;
int main(){
int a = 1,b = 2;
cout<<add(a,b)<<endl;
}
src/add.cpp
文件内容:
#include "add.h"
int add(int a, int b) {
int c = a+b;
return c; }
src/CMakeLists.txt
文件内容:
include_directories(${CMAKE_SOURCE_DIR}/include) #方便查找头文件,如果不指定会出现找不到头文件的问题
add_library(add SHARED add.cpp) # 编译动态库,生成liadd.so
test/CMakeLists.txt
文件内容如下
cmake_minimum_required(VERSION 3.14)
enable_testing()
find_package(GTest REQUIRED) #查找GTest的动态库
include_directories(${GTEST_INCLUDE_DIR})#Gtest的头文件
include_directories(${CMAKE_SOURCE_DIR}/include)#添加需要使用的函数add的头文件搜索路径
set(test_name test_demo)# 设置test名称
add_executable(${test_name} test.cpp) #生成测试文件
target_link_libraries(${test_name} ${GTEST_BOTH_LIBRARIES} add) #链接测试依赖库
add_test(
Name ${test_name}
COMMAND ${test_name}
)# 时make test生效
test/test.cpp
文件内容
#include <gtest/gtest.h>
#include <vector>
#include "add.h"
using namespace std;
TEST(MyTest,add){
vector<int> a = {1,2,3,4,5};
vector<int> b = {5,6,7,8,9};
int current = 6;
for(int i=0;i<a.size();i++){
EXPECT_EQ(add(a[i],b[i]),current);
current+=2;
}
}
int main(int argc,char* argv[]){
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}