由題目可知,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控制檯程序,然後配置工程屬性,包含以下幾個操作:
- 在VC++目錄下,設置gtest頭文件路徑和gtest.lib庫目錄;
- 在: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的一些優點:
- 可使用一些簡單的宏(如:TEST),這使得編寫測試案例變的非常簡單。
- gtest提供了強大豐富的斷言的宏,用於對各種不同檢查點的檢查。