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的開發板上才能運行該程序