Linux学习笔记VSCode-CMake-GTest实现自动化编译与测试
Linux学习笔记:VSCode + CMake + GTest实现自动化编译与测试
文章目录
前言
Linux系统中使用VScode + CMake +GTest实现大型工程的自动化编译与测试。
1. VSCode下CMake自动化编译
1.1 快速创建CMakeLists.txt
Ctrl+Shift+P
打开命令面板,选择
CMake: Quick Start
按提示选择编译器,这里选择了本机安装的GCC编译器
输入项目名称
选择生成可执行文件还是库文件
VSCode会自动生成CMakeLists.txt文件
1.2 选择编译版本
Ctrl+Shift+P
打开命令面板,选择
CMake: Select Variant
1.3 编译
Ctrl+Shift+P
打开命令面板,选择
CMake: Build
快捷键
F7
状态栏下的
Build
1.4 运行(不调试)
Ctrl+Shift+P
打开命令面板,选择
CMake: Run Without Debugging
快捷键
Shift+F5
1.5 调试
Ctrl+Shift+P
打开命令面板,选择
CMake: Debug
快捷键
Ctrl+F5
1.6 重新配置工程
Ctrl+Shift+P
打开命令面板,选择
CMake: Delete Cache and Reconfigure
删除原有Makefile文件
2. GTest安装与测试
2.1 GTest安装
GTest安装包官方网站:https://github.com/google/googletest/
# 解压
tar -zxf googletest-release-1.11.0.tar.gz
# 进入解压后的目录
cd googletest-release-1.11.0
# 为编译创建一个目录
mkdir build && cd build
cmake ..
# -j8表示使用8个工作线程编译
make -j8
# 安装
sudo make install
通过上述操作,GTest库文件安装在
/usr/local/lib/
目录,头文件安装在
/usr/local/include/
目录
2.2 测试GTest
使用Vim手动编写一个文件example.cpp验证GTest已正确安装。
#include <gtest/gtest.h>
int add(int a, int b) {
return a + b;
}
TEST(testCase, test0) {
EXPECT_EQ(add(8, 11), 19);
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
在命令窗口中执行如下编译命令:
$ g++ example.cpp -o example -lgtest -lpthread
$ ./example
测试成功!
3. VSCode下CTest单元测试
3.1 配置CMakeLists.txt
1) 重新配置工程
Ctrl+Shift+P
打开命令面板,选择
CMake: Delete Cache and Reconfigure
删除原有Makefile文件
2) 配置CTest内容
在CMakeLists.txt文件中手动配置CTest相关信息:
- 首先创建一个用于测试的cpp文件
add_executable
生成一个可执行文件用于测试和调试find_package
寻找GTest和Threads库include_directories
包含GTest的头文件目录target_link_libraries
链接要测试的库文件、GTest和Threads库gtest_discover_tests
寻找测试的可执行文件
cmake_minimum_required(VERSION 3.0.0)
project(InfoManage VERSION 0.1.0)
# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加源文件
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST)
# 设置编译选项
add_compile_options(-Wall -std=c++11)
# 设置版本
set(CMAKE_BUILD_TYPE Debug)
# 设置生成文件路径
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# 生成库文件
add_library(${PROJECT_NAME} STATIC ${SRC_LIST})
# CTest
include(CTest)
enable_testing()
add_executable(${PROJECT_NAME}_test ./test/InfoManageTest.cpp)
# 寻找GTest和Threads库,两个库必需
find_package(GTest REQUIRED)
find_package(Threads REQUIRED)
# 包含GTest的头文件目录
include_directories(${GTEST_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/include)
# 链接要测试的库文件、GTest和Threads库
target_link_libraries(${PROJECT_NAME}_test ${PROJECT_NAME} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
# Enable CMake's testing runner to discover the test executable file.
# If CMake's version is greater than 3.10, use the "gtest_discover_tests" statement, otherwise use the "add_test" statement.
gtest_discover_tests(${PROJECT_NAME}_test)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
3.2 编写测试文件
测试文件开头添加GTest头文件
#include <gtest/gtest.h>
通过
TEST()
函数对接口功能进行测试。
#include <gtest/gtest.h>
//某一接口函数的测试
TEST(addStudent_Test, BasicTest)
{
shared_ptr<IInfoManage> pInfoManage = getInfoManageImpl();
CStudentDTO stu(1, 80, "jack");
EXPECT_EQ(pInfoManage->addStudent(stu), 0);
EXPECT_EQ(pInfoManage->addStudent(stu), -1);
}
3.3 测试
Ctrl+Shift+P
打开命令面板,选择
CMake: Run Tests
,所有单元测试即被执行。