UbuntuでサクッとGoogle Testを使ってみよう
サクッとGoogle Testを使ってみよう!
前回UbuntuでのGoogle Testのインストール方法を示したので、 今回は実際にGoogle Testを使ってテストをする。サクッとね。
前回の記事はこちら。
UbuntuでGoogle Testをインストール
テスト対象のコードを考える
まずテスト対象のコードを考える*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_EQはGoogle 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 ドキュメント日本語訳