1. 程式人生 > >Google開源單元測試框架Google Test:VS2012 配置

Google開源單元測試框架Google Test:VS2012 配置

由題目可知,Google Test(簡稱gtest)是Google釋出的一個開源C/C++測試框架,被應用於多個開源專案及Google內部專案中,包括Chrome瀏覽器、LLVM編譯器架構、Protocol Buffers資料交換格式及工具、OpenCV計算機視覺庫等。

gtest支援Windows、Linux、Mac OS X、Symbian等作業系統。該篇記錄了Windows 10 64位系統下gtest的下載、安裝、編譯,建立一個測試Demo工程並編寫一個簡單的測試例程。

一、準備工作

二、編譯

下載googletest-master並解壓, 找到msvc目錄:

這裡寫圖片描述

注:從官方說明中指定:Windows Requirements:Microsoft Visual C++ v7.1 or newer,即如果使用Visual C++編譯,要求編譯器版本不低於7.1(Visual C++ 2003)。

開啟msvc裡面的工程檔案gtest, 開啟後會提示VS版本較高,需要升級工程檔案,升完級後,我們直接編譯裡面的gtest工程,這裡發現錯誤,編譯不通過。

這裡寫圖片描述

這裡寫圖片描述

查找了一些配置教程,修改:include\gtest\gtest.h檔案:

這裡寫圖片描述

加入:#define _VARIADIC_MAX 10

這裡寫圖片描述

再次編譯成功,可分別在dubeg和release兩種解決方案配置下分別編譯:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

三、測試Demo

新建一個VS 2012控制檯程式,然後配置工程屬性,包含以下幾個操作:

  1. 在VC++目錄下,設定gtest標頭檔案路徑和gtest.lib庫目錄;

這裡寫圖片描述

  1. 在:C/C++ -> 程式碼生成 -> 執行庫,若當前除錯的是Debug版本,則設定為多執行緒除錯(/MTd);若為release,則設定為多執行緒(/MT)。

一段示例程式碼:

#include <gtest\gtest.h>
#include <iostream>

int Foo(int a, int b) // 求a和b的最大公約數
{
    if (a == 0 || b == 0)
    {
        throw "don't do that";
    }
    int c = a % b;
    if (c == 0)
        return b;
    return Foo(b, c);
}

TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(2
, Foo(4, 10)); // 失敗時,案例繼續執行 EXPECT_EQ(6, Foo(30, 18)); ASSERT_EQ(5, Foo(2.5, 5));// 失敗時,當前函式返回 EXPECT_EQ(2, Foo(16, 18)); } int main(int argc, char* argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }

在cmd中執行,結果如下:

這裡寫圖片描述

其中,用到兩個巨集(屬於EXPECT_* 系列和ASSERT_*系列),用法在註釋中大致提到。

由於學習還不夠深入,只能總結出gtest的一些優點:

  1. 可使用一些簡單的巨集(如:TEST),這使得編寫測試案例變的非常簡單。
  2. gtest提供了強大豐富的斷言的巨集,用於對各種不同檢查點的檢查。