お茶漬けびより

学んだことを整理する場所です。主に、C++, Unreal Engine 4 (UE4) を扱います。たまに趣味や雑記も。現在(2017/7/1より)無職です。

googletest を使ってみた

f:id:pickles-ochazuke:20170828184058j:plain

北海道の土産用お菓子は、どれもおいしくて最高です。

趣味でコードを書いてるけど、テストコードは全く書いてこず、仕事でテストコードを初めて書いて、良いテストコードを書くのは難しいなぁと実感し、ちょっとこれは練習しないとダメだなということで、テストコードを書く環境を作り始めました。

googletest を見つけたので、これでいいかと選択。使う理由は、情報が多そうなのと使いやすそうな感じが理由。

Windows 版の Visual Studio 2017 上で動かしたので、そのまとめを書いておきます。

googletest を落とす

まずは、googletest を落としてこないと始まりません。

github.com

落としたら解凍します。

Google Test を追加

google-master/googletest/msvc/2010/ の中に、gtest.sln というソリューションファイルがあるので、Visual Studio で開きます。 開くと、セキュリティ警告をしてくると思うので、内容を読んで、問題なければ OK を押します。そのあとプロジェクトの再ターゲットが出るので、設定に問題なければ OK を押します。

f:id:pickles-ochazuke:20170828180315p:plain

完了したら gtest.sln を閉じます。次にテスト対象のプロジェクトを用意します。今回は、TestProject というプロジェクトを作成しました。次に、ソリューションに googletest のプロジェクトを追加します。 ソリューションエクスプローラからソリューションを右クリックし、追加 > 既存のプロジェクト を選び、

f:id:pickles-ochazuke:20170828180445p:plain

先ほど解凍した googletest/msvc/2010/gtest.vcxproj を追加します。追加すると以下のようになります。

f:id:pickles-ochazuke:20170828180553p:plain

環境設定

TestProject には、何もコードが書かれていないので追加します。ここでは、main.cpp を追加しました。追加したら、まずは googletest を使えるようにしましょう。TestProjectプロパティを開き、構成プロパティ > C/C++ > 全般 のなかの追加のインクルードディレクトリに新しいパスを追加します。

f:id:pickles-ochazuke:20170828180835p:plain

そこに googletest/include を追加します。もちろん、googletest より前は、googletest を置いている場所のパスが入ります。追加したら OK をクリックし、設定を反映させます。次に、TestProject の参照を追加します。参照を右クリックすると参照の追加が出るので、それをクリックし、gtest にチェックを入れます。

f:id:pickles-ochazuke:20170828180933j:plain

最後に、gtest プロジェクトのプロパティを表示し、構成プロパティ > C/C++ > コード生成 からランタイムライブラリを環境に合わせて設定します。よく分からない場合は、テスト対象のプロジェクトと同じにすれば問題ないはずです。ここでは、構成Debug に変更し、ランタイムライブラリマルチスレッドデバッグDLL(/MDd) にしました。OK をクリックして、プロパティを閉じます。

f:id:pickles-ochazuke:20170828181004p:plain

テストコードの作成

最後にテストコードを作成します。今回は、main.cpp に直接テストコードを作成します。

#include "gtest\gtest.h"

TEST()
{
    EXPECT_EQ(0, 1 - 1);
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

main 関数内の ::testing::InitGoogleTest(&argc, argv)RUN_ALL_TEST() がテスト実行のために必要な処理です。TEST(){} 内の処理が実際にテストしたい内容になります。

これを実行すると以下のように表示されます。

f:id:pickles-ochazuke:20170828181137p:plain

以上で基本的な設定と使い方は、完了です。 詳しく知りたい方は、

入門ガイド — Google Test ドキュメント日本語訳

あたりを参照するといいでしょう。

おまけ

googletest は、include ディレクトリと msvc ディレクトリ、src ディレクトリが同じ階層にあれば問題なさそうなので、この三つをコピーして、ソリューションごとに置くと良さそうです。

おわり

以上が googletest の使い方でした。Visual Studio に googletest を入れていると Visual Studio さんに Test Adapter for Google Test をお勧めされたので、気が向いたら試してみようと思います。Community でも使えるんですかね……?

marketplace.visualstudio.com