code-prettify

2015年3月21日 星期六

googletest - Google C++ Testing Framework - Visual Studio 2013

本文介紹如何在 Visual Studio 2013 使用 Google C++ Testing Framework

首先取得 gtest,下載 gtest-1.7.0.zip
解壓縮之後,在 msvc 資料夾下可以找到 gtest, gtest-md 兩個方案檔,
兩個方案差別在 gtest 編譯屬性為 MT (MTd),而 gtest-md 為 MD (MDd),
這裡要選擇跟待測專案同樣的設定,關於 MD, MT 詳細資訊請見 MSDN


如果手邊沒有現有專案的話,先建立一個空專案在 C:\Project1,
因為 VS C++ 專案預設為 MD,所以接下來選擇 gtest-md 為範例。

直接點擊兩下gtest-md 方案,VS 會自動將 VS 2003 版本轉換為 VS2013 版本,
編譯之後,複製 msvc\gtest-md\Debug\gtestd.lib 及 C:\gtest-1.7.0\msvc\gtest-md\Release\gtest.lib
到 C:\Project1\Project1\gtest\lib
另外複製 C:\gtest-1.7.0\include 整個資料夾到 C:\Project1\Project1\gtest。



接著設定 Project1 的專案使用 googletest,分別是
其他 Include 目錄為 .\gtest\include
其他程式庫目錄為 .\gtest\lib
其他相依性為 gtest.lib




接著將 main.cpp 改為下列範例
#include "gtest/gtest.h"
 
int main(int argc, char* argv[])
{
 ::testing::InitGoogleTest(&argc, argv);
 return RUN_ALL_TESTS();
}
 
int add(int a, int b)
{
 return a + b;
}
 
TEST(AddTest, Test1) {
 EXPECT_EQ(3, add(1, 2));
}

編譯,執行成功!
恭喜可以開始進行 Unit Test 了!



註:如果使用 Visual Studio 2012 會遇到「error C2977: 'std::tuple' : 樣板 引數太多 」錯誤
可以參考這篇:error C2977: 'std::tuple' : too many template arguments


參考資料:
googletest - Google C++ Testing Framework
https://code.google.com/p/googletest/

Primer - Getting started with Google C++ Testing Framework
https://code.google.com/p/googletest/wiki/Primer

Samples - Google C++ Testing Framework Samples
https://code.google.com/p/googletest/wiki/Samples

2015年3月20日 星期五

error C2977: 'std::tuple' : too many template arguments

最近遇到「error C2977: 'std::tuple' : 樣板 引數太多 」的問題,
上網查詢之後發現是 Visual Studio 2012 不支援 variadic templates,
解決方案是在前置處理器定義加上 _VARIADIC_MAX 10
註:Visual Studio 2013 已支援


參考資料:
C2977: 'std::tuple' : too many template arguments (MSVC11)
http://stackoverflow.com/questions/8274588/c2977-stdtuple-too-many-template-arguments-msvc11