Qt項目中集成使用Google Test單元測試模塊

Google Test的下載安裝

  • 下載googletest完成後解壓
    下載地址:https://github.com/google/googletest

  • 利用QtCreator自動生成googletest的pri項目依賴文件
      由於我們要集成到Qt項目中,需要把googletest集成進來,需要自己編寫一個pri文件,然後依賴到自己的Qt項目中,其實QtCreator已經可以自動生成googletest的pri文件,無需手動操作了。步驟如下:

  1. 新建測試工程。
    在這裏插入圖片描述
  2. 配置工程,選擇好googletest目錄。
    在這裏插入圖片描述
  3. 工程生成完成後,會在工程目錄下生成gtest_dependency.pri的pri文件。把此文件拷貝到googletest-master的目錄下面去。該文件即爲自動生成的googletest的依賴文件,其他項目包含集成此文件即可使用googletest。不過使用前需要稍微進行修改,
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 其他項目工程引用
    我們只有在其他工程的.pro文件中引入gtest_dependency.pri文件即可。注意include的路徑,根據自己的路徑進行修改。
include(./googletest-master/gtest_dependency.pri)

然後在main.cpp中包含頭文件即可使用googletest進行單元測試。

#include "mainwindow.h"
#include <QApplication>

#include <gtest/gtest.h>
#include <gmock/gmock-matchers.h>
using namespace testing;

int Factorial(int n)
{
    int result = 1;
    for (int i = 1; i <= n; i++)
    {
        result *= i;
    }

    return result;
}

TEST(Factorial, Empty)
{
    EXPECT_EQ(1, Factorial(1));
}

int main(int argc, char *argv[])
{
    QHxApplication a(argc, argv);
    ::testing::InitGoogleTest(&argc, argv); //googleTest框架
    
    MainWindow w;
    w.show();

    RUN_ALL_TESTS();//googleTest框架
    return a.exec();
}

可以通過QtCreator下面的測試結果界面運行並查看單元測試結果。
在這裏插入圖片描述

googletest基本用法:
【基本斷言】:

Fatal assertion Nonfatal assertion Verifies
ASSERT_TRUE(condition) EXPECT_TRUE(condition) condition is true
ASSERT_FALSE(condition) EXPECT_FALSE(condition) condition is false

【二元斷言】:

Fatal assertion Nonfatal assertion Verifies
ASSERT_EQ(val1, val2); EXPECT_EQ(val1, val2); val1 == val2
ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2
ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2
ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2
ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2
ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2

【字符串斷言】:

Fatal assertion Nonfatal assertion Verifies
ASSERT_STREQ(str1, str2); EXPECT_STREQ(str1, str2); the two C strings have the same content
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); the two C strings have different contents
ASSERT_STRCASEEQ(str1, str2); EXPECT_STRCASEEQ(str1, str2); the two C strings have the same content, ignoring case
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); the two C strings have different contents, ignoring case
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章