VSCode 中使用 Google Test(GTest)框架測試

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912658.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912658.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912658.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫】

1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫 &#x1f3af; 學習目標 掌握數據庫表結構設計原則理解字段類型選擇與優化學會雪花算法ID生成策略掌握索引設計與優化技巧了解分庫分表設計方案 &#x1f4d6; 故事開始 小明: “老王&#xff0c;我總是不知道怎么設計數…

OSPF虛擬鏈路術語一覽:快速掌握網絡路由

大家好&#xff0c;這里是G-LAB IT實驗室。今天帶大家了解一下OSPF的相關知識&#xff01; 01 OSPF虛擬鏈路術語大全 網絡架構中&#xff0c;OSPF&#xff08;開放式最短路徑優先&#xff09;是一種重要的路由協議。通過其鏈路狀態路由機制&#xff0c;OSPF能夠有效維護和更新…

oracle常用的函數(一) 之 to_char、to_date

文章目錄 前言to_char基本語法格式模型格式模型介紹無FM示例使用FM輸出貨幣負數輸出尖括號 將日期格式化將數字格式化為帶有貨幣符號和千位分隔符的格式總結 to_date語法語法示例 戳這里&#xff0c;第二彈 → oracle常用的函數&#xff08;二&#xff09; 之 nvl、decode、l…

數據庫服務器宕機的處理方法與實戰策略

在當今數字化時代,數據庫作為企業數據存儲與管理的核心,承載著業務運行的關鍵信息。一旦數據庫服務器宕機,將導致業務中斷、數據丟失等嚴重后果,甚至可能給企業帶來巨大的經濟損失和聲譽損害。因此,掌握一套系統、科學的數據庫服務器宕機處理方法尤為重要。本文將從應急響…

如何hack邊緣的kubelet修改Cgroup數值

之前做了一個VPA項目的需求&#xff0c;就是需要不重啟的方式修改容器的Cgroup的值已達到垂直擴縮容的目的&#xff0c;項目中核心的思路如下 上游下發要VPA的結果的值寫入到容器的Annotation里面Kubelet 感知到這個 annoation 的變化我們本地運行一個 Agent&#xff0c;里面運…

熟悉 PyCharm

界面 我們常用的就這個幾個地方&#xff1a; 常用配置 調整字體大小 Ctrl 滾輪調整字體大小 插件推薦 Indent Rainbow 該插件的作用在于能夠對于不同層級縮進的空格標注不同的顏色&#xff1a; 快捷鍵 快捷鍵的 pdf 下載鏈接&#xff1a; Windows 版&#xff1a;https:…

pytorch--模型訓練的一般流程

文章目錄 前言0、數據集準備1、數據集2、dataset3、model4、訓練模型 前言 在pytorch中模型訓練一般分為以下幾個步驟&#xff1a; 0、數據集準備 1、數據集讀取&#xff08;dataset模塊&#xff09; 2、數據集轉換為tensor&#xff08;dataloader模塊&#xff09; 3、定義模型…

智能合同管理實戰:基于區塊鏈的電子簽約技術實現

在數字經濟時代,傳統紙質合同簽署方式已難以滿足企業高效、安全、合規的業務需求。智能合同管理(Smart Contract Management)結合區塊鏈技術,正在重塑電子簽約流程,實現合同全生命周期的自動化、可追溯和防篡改。本文將深入探討基于區塊鏈的電子簽約技術實現,涵蓋核心架構…

設計模式精講 Day 22:模板方法模式(Template Method Pattern)

【設計模式精講 Day 22】模板方法模式&#xff08;Template Method Pattern&#xff09; 文章標簽 設計模式, 模板方法模式, Java開發, 面向對象設計, 軟件架構, 設計模式實戰, Java應用開發 文章簡述 模板方法模式是一種行為型設計模式&#xff0c;它通過定義一個算法的骨架…

如何在pytorch中使用tqdm:優雅實現訓練進度監控

文章目錄 為什么需要進度條&#xff1f;tqdm 簡介基礎用法示例深度學習中的實戰應用1. 數據加載進度監控2. 訓練循環增強版3. 驗證階段集成 高級技巧與最佳實踐1. 自定義進度條樣式2. 嵌套進度條&#xff08;多任務&#xff09;3. 分布式訓練支持4. 與日志系統集成 性能優化建議…

Linux中的xxd命令詳解

xxd 是一個 十六進制轉儲&#xff08;hex dump&#xff09;工具&#xff0c;通常用于將二進制文件轉換為十六進制格式&#xff0c;或者反向轉換&#xff08;十六進制→二進制&#xff09;。它是 vim 的一部分&#xff0c;但在大多數 Linux 系統&#xff08;如 Ubuntu&#xff0…

磐維數據庫panweidb3.1.0單節點多實例安裝

0 說明 業務科室提單需要在某臺主機上部署多個單機磐維數據庫&#xff0c;用于業務測試。以下內容展示如何在單節點安裝多個磐維數據庫實例。 1 部署環境準備 1.1 IP 地址及端口 instipport實例1192.168.131.1717700實例2192.168.131.1727700 在131.17上分別安裝兩個實例&…

轉錄組分析流程(三):功能富集分析

我們的教程主要是以一個具體的例子作為線索,通過對公共數據庫數據bulk-RNA-seq的挖掘,利用生物信息學分析來探索目標基因集作為某種疾病數據預后基因的潛能及其潛在分子機制,同時在單細胞水平分析(對scRNA-seq進行挖掘)預后基因的表達,了解細胞之間的通訊網絡,以期為該疾病…

全面掌握 tkinter:Python GUI 編程的入門與實戰指南

在自動化、工具開發、數據可視化等領域&#xff0c;圖形用戶界面&#xff08;GUI&#xff09;往往是提升用戶體驗的重要方式。作為 Python 官方內置的 GUI 庫&#xff0c;tkinter 以其輕量、跨平臺、易于學習的特性成為初學者和輕量級應用開發者首選。 本文將以深入淺出的方式…

TDH社區開發版安裝教程

&#xff08;注&#xff1a;本文章來源于星環官網安裝手冊&#xff09; 后面放置了視頻和安裝手冊連接 1、硬件及環境要求 Docker17及以上版本&#xff0c;支持Centos&#xff0c;Ubuntu等系統&#xff08;注&#xff1a;這里我使用CentOS-7版本&#xff0c;最佳版本推薦為7.…

Linux基本命令篇 —— grep命令

grep是Linux/Unix系統中一個非常強大的文本搜索工具&#xff0c;它的名字來源于"Global Regular Expression Print"&#xff08;全局正則表達式打印&#xff09;。grep命令用于在文件中搜索包含特定模式的行&#xff0c;并將匹配的行打印出來。 目錄 一、基本語法 二…

蒼穹外賣問題系列之 蒼穹外賣訂單詳情前端界面和網課給的不一樣

問題 如圖&#xff0c;我的前端界面和網課里面給的不一樣&#xff0c;沒有“申請退款”和一些其他的該有的東西。 原因分析 “合計”這一欄顯示undefined說明我們的總金額沒有輸入進去。可以看看訂單提交那塊的代碼&#xff0c;是否可以正確輸出。還有就是訂單詳細界面展示這…

CppCon 2018 學習:EMULATING THE NINTENDO 3DS

我們來逐個分析一下這個 組件交互模型 和 仿真 & 序列化 的關系&#xff0c;特別是主線程&#xff08;Main Thread&#xff09;與其他系統組件之間的交互。 1. Main Thread — simple (basically memcpy) --> GPU Main Thread&#xff08;主線程&#xff09;負責游戲的…

[Python 基礎課程]數字

數字 數字數據類型用于存儲數值&#xff0c;比如整數、小數等。數據類型是不允許改變的&#xff0c;這就意味著如果改變數字數據類型的值&#xff0c;將重新分配內存空間。 創建數字類型的變量&#xff1a; var1 1 var2 10創建完變量后&#xff0c;如果想廢棄掉這個變量&a…

Linux CentOS環境下Java連接MySQL數據庫指南

文章目錄 前言一、環境準備1.1 系統更新1.2 Java環境安裝1.3 MySQL數據庫安裝1.4 下載JDBC驅動 二、編寫Java程序2.1 代碼如下2.2 編譯和運行2.3 驗證創建結果 三、代碼上傳至Gitee3.1 安裝配置Git3.2 克隆倉庫到本地3.3 添加Java項目文件3.4 提交代碼到本地倉庫3.5 推送到Gite…