UbuntuでサクッとGoogle Testを使ってみよう

サクッとGoogle Testを使ってみよう!

前回UbuntuでのGoogle Testのインストール方法を示したので、 今回は実際にGoogle Testを使ってテストをする。サクッとね。

前回の記事はこちら。
UbuntuでGoogle Testをインストール

開発環境について

動作確認をした環境はこちら。

OS Ubuntu 11.04
コンパイラ g++ 4.5.2
Google Test gtest 1.5.0

テスト対象のコードを考える

まずテスト対象のコードを考える*1
今回は引数同士を足した結果を返す関数addをテストする。addを定義してみよう。

int add(int x, int y) {
    return x + y;
}

テストコードを考える

次にテストコードを考える。 addの引数に具体的な値を与えて期待する値が得られるか確かめよう。

例えば2+3=5なので今回はaddの引数に2と3を与えて5が返ってくるか確かめるコードを記述する。

TEST(AddTest, TwoAndThree) {
    EXPECT_EQ(add(2, 3), 5);
}

Google Testではテストはマクロで記述する。
一つのテストを記述する時はTESTというマクロを使う。

TESTの最初の引数にはテストケース名、2番目の引数にはテスト名を記述する。 Google Testは複数のテストを行う場合テストケース名でグループ化してテストを実行する。 テストケース名が異なればそれぞれに同じテスト名を記述することができる。

TESTのブロック内にはこのテストで実行するC++のコード記述する。 ここにはアサーションというテストが成功あるいは失敗するための条件を記述することができる。 Google Testではアサーションをマクロを使って実現する。

EXPECT_EQGoogle Testで使えるアサーションの一つである。 最初の引数と2番目の引数が等しい場合に成功、そうでなかった場合失敗となる。

今回の場合add(2, 3)5が等しくなるか確かめたいので EXPECT_EQの最初の引数にadd(2, 3) 2番目の引数に5を与えた。

ソースコードを書く

それではテスト対象のコードとテストコードを繋げてファイルに書き込もう。
Google Testのマクロを使うときはgtest/gtest.hをインクルードする必要があるので注意。

add_test.cppというファイルにでも書き込むといいと思う。
Gistにも上げてあるので自分で書くのが面倒な人はダウンロードしてね*2
https://gist.github.com/1256079

本当はテスト対象のコードとかテストコードは 別のファイルに記述する方が実際の開発の状況に近いんだろうけど、 ここではサクッと記述してサクサクッとビルドしてサクサクサクッと実行できるコードを示したかったので 全部一つのファイルに記述することにした。

ビルド

Google Testはテスト用の実行ファイル作成して、それを実行することでテストを行う。

その実行ファイルを作るには、さっき記述したコードをコンパイルしてGoogle Testのライブラリとリンクする必要がある。 オプションに-lgtest_main-lpthread *3を付けてg++でビルドしよう。

$ g++ -o add_test -lgtest_main -lpthread add_test.cpp

テストの実行

それでは今回作ったテストを実行してみよう。
先ほどビルドした実行ファイルを実行する。

$ ./add_test

すると次のような結果が出力される。

Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from AddTest
[ RUN      ] AddTest.TwoAndThree
[       OK ] AddTest.TwoAndThree (0 ms)
[----------] 1 test from AddTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 1 test.

とりあえずOKとか出てるので、なんとなくテストが成功したことが分かる。

もっと詳しい情報

もっと詳しい情報はこちらで。
Google Test — Google Test ドキュメント日本語訳

おまけ

ここからは雑記です。

C++のテストツールをいくつか試してみたんですが、 それらはおまじない的な何かをたくさん記述する必要があったり、 テストを実行するための準備が面倒なものが多くて困ってたんですよね。 その点Google Testはコードの記述もビルドも割と簡単にできるので、これから積極的に使おうと思ってます。 これからC++でテストを書いてみたいっていう人にもおすすめです!

Vimで開いてるテストコードをビルド・実行できたら最高ですね!(既にそういうものがあるのか、もしくは作れということなのか

*1:最初にテストコードから考えてもいいんじゃない!?って思った人はTDDについて調べてみると幸せになれるよ!

*2:たぶんコピペした方が早いと思うけどね!

*3:pthreadはGoogle Testのライブラリじゃないんだけど必要みたい