そこで Visual Studio 11 Beta でも Google Test を使ってみようと思います。
今回の元ネタは、Google グループの Google C++ Testing Framework のこちらの投稿です。
備忘録としてブログにまとめておこうと思います。
プロジェクトの準備
まずは、ダウンロードページより取得した Google Test を解凍します。解凍したフォルダの中に msvc フォルダがあり、そこの gtest.sln を Visual Studio 11 で開きます。
(Visual Studio 11 Beta のインストールは済ませておいてください。)
プロジェクトのアップグレード(変換)ダイアログが出るので、
アップグレードします。
プロジェクトが正常に読み込まれたら、準備完了です。
ビルド
F7 キーを押して終わり。とはいきません・・・error C2977: 'std::tuple' : テンプレート 引数の数が多すぎます
error C3203: 'tuple' : 非特殊クラス テンプレート は、テンプレート 引数として テンプレート パラメーター 'T' に使用できません。実際の型を指定してくださいとか
error C2955: 'testing::internal::ParamIteratorInterface' : クラス テンプレート を使用するには テンプレート 引数リストが必要ですというエラーがでます。
一番簡単な対処方法は GTEST_HAS_TR1_TUPLE=0 としてしまうことです。
ただし、こうすると値をパラメータ化したテストで Combine が使えなくなってしまいます。
gtest-port.h
Combine を使えるようにするために、gtest/internal/gtest-port.h を編集します。まずは、MSVC11 の <tuple> は名前空間が異なっているため、対応します。
gtest-port.h の 506 行目に以下を付け足します。
# if defined(_MSC_VER) && _MSC_VER >= 1700 namespace std { namespace tr1 { using std::tuple; } } # endif
次に、Variadic Templates の上限を増やします。
えっ、と思う方もいるかもしれませんが、そういうもんだと思ってください。
gtest-port.h の 38 行目あたりに以下を付け足します。
#if defined(_MSC_VER) && _MSC_VER == 1700 # ifndef _VARIADIC_MAX # define _VARIADIC_MAX 10 # elif _VARIADIC_MAX < 9 # define GTEST_HAS_TR1_TUPLE 0 # endif #endif
もし、確実に使いたい場合は
プロジェクトのプロパティからプリプロセッサの定義に _VARIADIC_MAX=10 を追加してください。
以上の対処でビルドエラーは解消されたはずです。
あとは今まで通りに使えると思います。
今回はここまでです。それでは。
0 件のコメント:
コメントを投稿