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

單元測試是對軟件基本組成單元進(jìn)行的測試,可以用于對某個功能或者某個類或某個函數(shù)進(jìn)行測試。善用單元測試可以有效提高開發(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 添加依賴,不需要把源碼拷貝進(jìn)來正式項目。

目錄結(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)
# 把源碼添加進(jìn)來參與編譯
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ù),會運行所有的測試用例。

對單個文件所有用例測試

右擊頁面的空白處,可以對整個文件的用例進(jìn)行測試。


測試單個用例

也可以點擊測試用例的前面的運行按鈕對用例進(jìn)行單獨測試。


示例源碼

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容