C++:CMake 項目集成 GTest 單元測試教程

單元測試是對軟件基本組成單元進行的測試舟茶,可以用于對某個功能或者某個類或某個函數(shù)進行測試。善用單元測試可以有效提高開發(fā)效率堵第,使用單元測試編寫代碼的也更加可靠性吧凉。GTest 全程 Google Test,是 Google 推出的 C++ 測試框架型诚,可以提高編寫單元測試用例的效率客燕。本文示例是基于 clion 編寫的程序,這是至今最好用的 C++ IDE之一狰贯,極力推薦使用也搓。

下載GTest到項目

首先到 googletest 下載源碼赏廓,由于項目中已經(jīng)包含了 CMakeLists.txt 文件,只需要把代碼復(fù)制到項目中傍妒,如果 cmake 的版本低于 3.11.0幔摸,推薦通過 git submodule 方式引入到項目,cmake 3.11.0 以上通過 FetchContent 添加依賴颤练,不需要把源碼拷貝進來正式項目既忆。

目錄結(jié)構(gòu)

這里推薦把 gtest 源碼拷貝到 third_party 目錄下。

├── CMakeLists.txt
├── src
│   ├── CMakeLists.txt
│   ├── add.cpp
│   └── add.h
├── test
│   ├── CMakeLists.txt
│   ├── main.cpp
│   └── test.cpp
└── third_party
    └── gtest
        ├── googletest
        ├── CMakeLists.txt
        └── ...

編寫代碼

src/add.h

#ifndef ADD_HPP
#define ADD_HPP
int add(int a, int b);
#endif // ADD_HPP

src/add.cpp

#include "add.h"

int add(int a, int b) {
    return a + b;
}

src/CMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)
project(src)
# 定義需要參與編譯的源文件
aux_source_directory(. source)
# 把源碼添加進來參與編譯
add_library(${PROJECT_NAME} ${source})
# 定義需要暴露的頭文件
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR})

編寫單元測試用例

test/CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(test)
add_executable(${PROJECT_NAME} main.cpp test.cpp)
target_link_libraries(${PROJECT_NAME} gtest src)

test/test.cpp

#include "gtest/gtest.h"
#include "add.h"

int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

TEST(SuiteName, TestName1) {
    int expected = 3;
    int actual = add(1, 2);
    ASSERT_EQ(expected, actual);
}

TEST(SuiteName, TestName2) {
    int expected = 3;
    int actual = add(1, 3);
    ASSERT_EQ(expected, actual);
}

main.cpp

#include "gtest/gtest.h"
#include "add.h"

int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

根目錄 CMakeLists.txt

cmake_minimum_required(VERSION 3.17)
project(gtest_example)

set(CMAKE_CXX_STANDARD 14)
add_subdirectory(src)
add_subdirectory(test)
add_subdirectory(third_party/gtest)

運行用例

運行所有用例

可以通過運行 main 函數(shù)嗦玖,會運行所有的測試用例患雇。

對單個文件所有用例測試

右擊頁面的空白處,可以對整個文件的用例進行測試宇挫。


測試單個用例

也可以點擊測試用例的前面的運行按鈕對用例進行單獨測試苛吱。


示例源碼

https://github.com/taoweiji/cpp-cmake-example/tree/master/gtest-sample

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市器瘪,隨后出現(xiàn)的幾起案子翠储,更是在濱河造成了極大的恐慌,老刑警劉巖橡疼,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件援所,死亡現(xiàn)場離奇詭異,居然都是意外死亡欣除,警方通過查閱死者的電腦和手機住拭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耻涛,“玉大人废酷,你說我怎么就攤上這事瘟檩∧疲” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵墨辛,是天一觀的道長卓研。 經(jīng)常有香客問我,道長睹簇,這世上最難降的妖魔是什么奏赘? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮太惠,結(jié)果婚禮上磨淌,老公的妹妹穿的比我還像新娘。我一直安慰自己凿渊,他們只是感情好梁只,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布缚柳。 她就那樣靜靜地躺著,像睡著了一般搪锣。 火紅的嫁衣襯著肌膚如雪秋忙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天构舟,我揣著相機與錄音灰追,去河邊找鬼。 笑死狗超,一個胖子當(dāng)著我的面吹牛弹澎,可吹牛的內(nèi)容都是我干的芽隆。 我是一名探鬼主播啄栓,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撑蚌!你這毒婦竟也來了麦撵?” 一聲冷哼從身側(cè)響起刽肠,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎免胃,沒想到半個月后音五,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡羔沙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年躺涝,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扼雏。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡坚嗜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诗充,到底是詐尸還是另有隱情苍蔬,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蝴蜓,位于F島的核電站碟绑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏茎匠。R本人自食惡果不足惜格仲,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诵冒。 院中可真熱鬧凯肋,春花似錦、人聲如沸汽馋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至苗桂,卻和暖如春药磺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煤伟。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工癌佩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人便锨。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓围辙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親放案。 傳聞我的和親對象是個殘疾皇子姚建,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345