VSCode 中使用 Google Test(GTest)框架在 VSCode 中对 C++ 代码进行测试的示例:
一、Unbutu x86使用gtest
环境配置
-
安装 GTest :在 Ubuntu 系统中,可以通过命令
sudo apt-get install libgtest-dev
安装 GTest 库。对于其他系统,可前往GTest 官方网站查看安装教程。 -
配置 VSCode :确保 VSCode 已正确配置 C++ 编译环境,如安装 C/C++ 扩展等。
示例代码
-
被测试代码 (
Calculator.h
和Calculator.cpp
):
// Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_Hclass Calculator {
public:int add(int a, int b);int subtract(int a, int b);int multiply(int a, int b);double divide(int a, int b);
};#endif // CALCULATOR_H
// Calculator.cpp
#include "Calculator.h"int Calculator::add(int a, int b) {return a + b;
}int Calculator::subtract(int a, int b) {return a - b;
}int Calculator::multiply(int a, int b) {return a * b;
}double Calculator::divide(int a, int b) {if (b == 0) {return 0.0; // 简单处理除以零的情况}return static_cast<double>(a) / b;
}
-
测试代码 (
CalculatorTest.cpp
):
// CalculatorTest.cpp
#include <gtest/gtest.h>
#include "../Calculator.h"// 测试 add 方法
TEST(CalculatorTest, AddTest) {Calculator calculator;EXPECT_EQ(calculator.add(1, 2), 3);EXPECT_EQ(calculator.add(-1, 1), 0);EXPECT_EQ(calculator.add(-5, -3), -8);
}// 测试 subtract 方法
TEST(CalculatorTest, SubtractTest) {Calculator calculator;EXPECT_EQ(calculator.subtract(5, 3), 2);EXPECT_EQ(calculator.subtract(-1, 2), -3);EXPECT_EQ(calculator.subtract(-5, -3), -2);
}// 测试 multiply 方法
TEST(CalculatorTest, MultiplyTest) {Calculator calculator;EXPECT_EQ(calculator.multiply(3, 4), 12);EXPECT_EQ(calculator.multiply(-2, 5), -10);EXPECT_EQ(calculator.multiply(-3, -4), 12);
}// 测试 divide 方法
TEST(CalculatorTest, DivideTest) {Calculator calculator;EXPECT_DOUBLE_EQ(calculator.divide(6, 2), 3.0);EXPECT_DOUBLE_EQ(calculator.divide(-5, 2), -2.5);EXPECT_DOUBLE_EQ(calculator.divide(5, -2), -2.5);EXPECT_DOUBLE_EQ(calculator.divide(0, 5), 0.0);EXPECT_DOUBLE_EQ(calculator.divide(5, 0), 0.0); // 测试除以零的情况
}int main(int argc, char **argv) {testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}
目录结构
.
|-- Calculator.cpp
|-- Calculator.h
|-- api.test.js
`-- build`-- CalculatorTest.cpp
编译和运行测试
-
编译命令 :在终端中,使用如下命令编译测试代码。假设 GTest 库安装在
/usr/src/gtest
目录下。
g++ -std=c++11 -I/usr/src/gtest/include -I/usr/src/gtest ../Calculator.cpp CalculatorTest.cpp -o CalculatorTest /usr/src/gtest/libgtest.a /usr/src/gtest/libgtest_main.a -lpthread
-
运行测试 :运行编译生成的可执行文件
./CalculatorTest
,即可看到测试结果。
编译问题记录
现象:
解决:
-
检查 GTest 是否正确安装
-
如果你使用的是 Ubuntu 系统,可以通过运行以下命令来安装 GTest:
-
sudo apt-get install libgtest-dev
* 安装完成后,系统应该会自动将 GTest 的库文件安装到正确的目录,通常是`/usr/src/gtest`。不过,可能还需要手动编译 GTest 库。进入`/usr/src/gtest`目录,然后运行以下命令来编译和安装库:
mkdir build
cd build
cmake ..
sudo make install
-
检查编译命令中的路径是否正确
-
确保在编译命令中指定的路径
/usr/src/gtest/libgtest.a
和/usr/src/gtest/libgtest_main.a
是正确的。如果安装路径不同,请相应地修改编译命令中的路径。你可以通过以下命令来查找 GTest 库文件的实际位置:
-
find / -name "libgtest.a"
find / -name "libgtest_main.a"
* 根据查找结果,更新编译命令中的路径。
-
使用 CMake 构建项目
-
创建一个
CMakeLists.txt
文件来简化项目的构建过程。以下是一个简单的示例:
-
cmake_minimum_required(VERSION 3.10)
project(CalculatorTest)set(CMAKE_CXX_STANDARD 11)include_directories(/usr/src/gtest/include)
link_directories(/usr/src/gtest/build)add_executable(CalculatorTest Calculator.cpp CalculatorTest.cpp)
target_link_libraries(CalculatorTest gtest gtest_main pthread)
* 然后在 build 目录中运行以下命令来构建项目:
cmake ..
make
二、交叉编译arm的gtest
环境配置
-
下载 GTest 源码 :从GTest 官方网站下载最新版本的 GTest 源码。下载代码 :git clone https://github.com/google/googletest.git
-
解压并进入源码目录 :解压下载的文件,并进入 GTest 源码的
googletest
目录。 -
创建构建目录并编译 :在该目录下创建一个
build
目录,进入并使用交叉编译器编译 GTest 库:
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-g++ -DCMAKE_C_COMPILER=/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-gcc ..
make
-
安装交叉编译后的 GTest 库 :将编译生成的
libgtest.a
和libgtest_main.a
库文件复制到一个目录,如 /home/share/user/project/test:
cd /home/share/user/project/test
mkdir gtest/lib -p
cp lib*.a gtest/lib #注意:这里的lib*.a是下载源码编译后生成的arm64版本的库文件
示例代码(同“Unbutu x86使用gtest”)
目录结构
test目录下的目录结构如下:
home/share/user/project/test路径下文件如下:
-
修改 CMakeLists.txt 文件 :指定交叉编译后的 GTest 库路径:
cmake_minimum_required(VERSION 3.10)
project(CalculatorProject)# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)# 指定交叉编译工具链
set(CMAKE_C_COMPILER "/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-gcc")
set(CMAKE_CXX_COMPILER "/home/share/cross_tools/haiSi3403/x86-arm/aarch64-mix210-linux/bin/aarch64-mix210-linux-g++")# 确保 CMake 找到 Google Test 头文件
set(GTEST_INCLUDE_DIR "/home/share/user/project/test/gtest/include")
include_directories(${GTEST_INCLUDE_DIR})
message("GTest include directory: ${GTEST_INCLUDE_DIR}")#target_include_directories(CalculatorTest PRIVATE ${GTEST_INCLUDE_DIR})# 指定 Calculator 源文件
add_library(Calculator STATIC Calculator.cpp Calculator.h)# 指定测试源文件
add_executable(CalculatorTest CalculatorTest.cpp)# 指定交叉编译后的 GTest 库路径
set(GTEST_LIBRARY "home/share/user/project/test/gtest/lib/libgtest.a")
set(GTEST_MAIN_LIBRARY "home/share/user/project/test/lib/libgtest_main.a")# 链接 Calculator 库和 GTest 库到测试可执行文件
target_link_libraries(CalculatorTest Calculator ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY} pthread)
构建和运行测试
-
创建构建目录 :在项目根目录下创建一个
build
目录(可命名为build
),用于存放构建生成的文件。 -
运行 CMake 配置 :在
build
目录下运行 CMake 命令来配置项目:
cmake ..
-
构建项目 :运行以下命令来构建项目:
make
-
运行测试 :构建完成后,运行生成的测试可执行文件:
./CalculatorTest #说明:由于是交叉编译生成的,需要再对应的arm64的开发板上才能运行该程序