2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++のテストコードを書こう! Visual Studio - Google Test

Posted at

はじめに

RailsはRSpecを普段使ってますが、C++のテストコードは書いたことがありませんでした。
そんな中でGoogle Testを見つけたので、実際にやってみようと思います。
C++ Tutorial: Google Test (gtest) - 2020という記事の内容を一通りやります。

環境

  • Visual Studio 2015
    • 手元の環境がこれなので

実施

1. プロジェクト作成

まずはVisual Studio 2015でプロジェクトを作成。

スクリーンショット 2025-01-15 092547.png

Win32 コンソールアプリケーションにします。

image.png

次へ

image.png

完了

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の導入

公式のステップは以下のようになっています

  1. Download Google test
    1. Google Testをダウンロード
  2. Compile gtest into a static library
    1. ダウンロードしたソースからstaticライブラリを作成
  3. Create a unit test project
    1. unit test用のプロジェクトを作成
  4. Make a test case
    1. テストコード作成

3.1 Google Testのソースをダウンロード

冒頭で紹介した記事のgtest-1.7.0-rc1.zipをダウンロードするのが簡単でしたので、今回はこちらでやりました。

image.png

ダウンロードしたzipを解凍すると以下のようなファイル群が展開されます。
この中でsrcはGoogle Testのソースファイルのディレクトリ、includeはVisual Studioからincludeするディレクトリになります。

image.png

3.2 Google Testのソースをコンパイル

コンパイルするためのプロジェクトを作成します。

ソリューションを右クリック > 追加(D) > 新しいプロジェクト(N)から作成します。

image.png

プロジェクトの種類は「Win32 プロジェクト」、名前は自由だと思いますが、今回は記事に沿って「GoogleTest」にします。

image.png

設定画面が表示されるので

  • アプリケーションの種類: スタティックライブラリ
  • 追加のオプション: プリコンパイル済みヘッダーをOFF

にします

image.png

これによってGoogle Testをコンパイルするプロジェクトが作成されます。

image.png

コンパイルするためには先程ダウンロードしたソースファイルを取り込む必要があるので、プロジェクトのプロパティからインクルードディレクトリを追加します。

image.png

次に、Google Testのソースファイル.ccファイルを指定します。
Google Test > ソースファイル > 追加 > 既存の項目

image.png

追加対象のファイルは下記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のソースファイルが表示されます。

image.png

準備はおそらく整ったのでコンパイルをします。

プロジェクト > ビルド

image.png

成功すると以下のようにビルド: 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にします。

設定画面は触らずに進みます。

image.png

4.2 テストに必要なデータをプロジェクトに追加

まずは、プロジェクトのプロパティの「インクルードディレクトリ」に、Google Testに関するファイルを追加します。

image.png

image.png

次に、今回のテスト対象のsimple_mathを追加します。

image.png

最後に、テスト対象のsimple_mathとGoogle Testを、プロジェクトの参照に追加します。

image.png

ここまででテスト用プロジェクトの設定は整ったはずです。

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つの関数をテストしましたが、次はクラス等を交えたテストをやっていこうと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?