はじめに
RailsはRSpecを普段使ってますが、C++のテストコードは書いたことがありませんでした。
そんな中でGoogle Testを見つけたので、実際にやってみようと思います。
C++ Tutorial: Google Test (gtest) - 2020という記事の内容を一通りやります。
環境
- Visual Studio 2015
- 手元の環境がこれなので
実施
1. プロジェクト作成
まずはVisual Studio 2015でプロジェクトを作成。
Win32 コンソールアプリケーションにします。
次へ
完了
main関数のファイルが出来上がる。
// LetsGoogleTest.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int main()
{
return 0;
}
2. テスト対象の関数を作成
#pragma once
#include <cmath>
double cubic(double d) {
return pow(d, 3);
}
3. Google Testの導入
公式のステップは以下のようになっています
- Download Google test
- Google Testをダウンロード
- Compile gtest into a static library
- ダウンロードしたソースからstaticライブラリを作成
- Create a unit test project
- unit test用のプロジェクトを作成
- Make a test case
- テストコード作成
3.1 Google Testのソースをダウンロード
冒頭で紹介した記事のgtest-1.7.0-rc1.zip
をダウンロードするのが簡単でしたので、今回はこちらでやりました。
ダウンロードしたzipを解凍すると以下のようなファイル群が展開されます。
この中でsrc
はGoogle Testのソースファイルのディレクトリ、include
はVisual Studioからincludeするディレクトリになります。
3.2 Google Testのソースをコンパイル
コンパイルするためのプロジェクトを作成します。
ソリューションを右クリック > 追加(D) > 新しいプロジェクト(N)から作成します。
プロジェクトの種類は「Win32 プロジェクト」、名前は自由だと思いますが、今回は記事に沿って「GoogleTest」にします。
設定画面が表示されるので
- アプリケーションの種類: スタティックライブラリ
- 追加のオプション: プリコンパイル済みヘッダーをOFF
にします
これによってGoogle Testをコンパイルするプロジェクトが作成されます。
コンパイルするためには先程ダウンロードしたソースファイルを取り込む必要があるので、プロジェクトのプロパティからインクルードディレクトリを追加します。
次に、Google Testのソースファイル.cc
ファイルを指定します。
Google Test > ソースファイル > 追加 > 既存の項目
追加対象のファイルは下記2つです。
(ディレクトリは適宜読み替えてくださいm(_ _)m)
C:\GTEST\gtest-1.7.0\src\gtest_all.cc
C:\GTEST\gtest-1.7.0\src\gtest_main.cc
追加するとGoogle Testプロジェクト内にGoogle Testのソースファイルが表示されます。
準備はおそらく整ったのでコンパイルをします。
プロジェクト > ビルド
成功すると以下のようにビルド: 1 正常終了
と表示されるはずです。
1> 4 ミリ秒 CopyFilesToOutputDirectory 1 回呼び出し
1> 4 ミリ秒 InitializeBuildStatus 1 回呼び出し
1> 7 ミリ秒 PrepareForBuild 1 回呼び出し
1> 8 ミリ秒 SetBuildDefaultEnvironmentVariables 1 回呼び出し
1> 9 ミリ秒 _CheckForInvalidConfigurationAndPlatform 1 回呼び出し
1> 458 ミリ秒 SetCABuildNativeEnvironmentVariables 1 回呼び出し
1> 774 ミリ秒 Lib 1 回呼び出し
1> 2411 ミリ秒 ClCompile 1 回呼び出し
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
4. Unit Testの作成
Google Testの準備は整いましたので、実際にテストコードを書いていきます。
4.1 Unit Testのプロジェクト作成
まずはテスト用のプロジェクトを作成します。
ソリューションを右クリック > 追加 > 新しいプロジェクトで追加します。
追加画面では、種類を「Win32 コンソールアプリケーション」にし、プロジェクト名をunittest_simple_math
にします。
設定画面は触らずに進みます。
4.2 テストに必要なデータをプロジェクトに追加
まずは、プロジェクトのプロパティの「インクルードディレクトリ」に、Google Testに関するファイルを追加します。
次に、今回のテスト対象のsimple_mathを追加します。
最後に、テスト対象のsimple_mathとGoogle Testを、プロジェクトの参照に追加します。
ここまででテスト用プロジェクトの設定は整ったはずです。
4.3 テスト実装
ではいよいよテストを書いていきます。
Google Testのヘッダーであるgtest/gtest.h
と、今回実装したヘッダーであるsimple_math.h
をincludeします。
そしてテストケース、期待結果と一緒に、実装した関数を実行します。
#include "stdafx.h"
#include "gtest/gtest.h"
#include "simple_math.h"
TEST(testMath, myCubeTest)
{
EXPECT_EQ(1000, cubic(10));
}
実行に成功すると以下のようなログが出力されるはずです。
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from testMath
[ RUN ] testMath.myCubeTest
[ OK ] testMath.myCubeTest (0 ms)
[----------] 1 test from testMath (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (2 ms total)
[ PASSED ] 1 test.
無事にUnit Testを行うことができました!
おわりに
今回は1つの関数をテストしましたが、次はクラス等を交えたテストをやっていこうと思います。