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工程並編寫一個簡單的測試例程。

一、準備工作

gtest下載地址:https://github.com/google/googletest
編譯環境:Visual 2012 Ultimate

二、編譯

下載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提供了強大豐富的斷言的宏,用於對各種不同檢查點的檢查。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章