最低限テストとして利用できる基本的な使い方について解説します。応用についてはおいおい。
テストを記述する
テストは、関数のように見えるTEST
マクロを使って記述します。
TEST(テストケース名, テスト名) { テスト本体 }
個々のテストは特に登録などの手続きをする必要がなく、TEST
マクロを使って書き足すだけで実行の対象になってくれます。
#include <gtest/gtest.h> int add(int x, int y) { return x + y; } TEST(AddTest, Test1) { ASSERT_EQ(2, add(1, 1)); } TEST(AddTest, Test2) { ASSERT_EQ(3, add(1, 2)); } TEST(AddTest, Test3) { ASSERT_EQ(4, add(2, 2)); } int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
実行結果。
[==========] Running 3 tests from 1 test case. [----------] Global test environment set-up. [----------] 3 tests from OpTest [ RUN ] OpTest.Add1 [ OK ] OpTest.Add1 [ RUN ] OpTest.Add2 [ OK ] OpTest.Add2 [ RUN ] OpTest.Add3 [ OK ] OpTest.Add3 [----------] Global test environment tear-down [==========] 3 tests from 1 test case ran. [ PASSED ] 3 tests.
テストに失敗した場合
テストに失敗した場合は次のようになります。
コードの一部を書き換えて実行してみます。
TEST(AddTest, Test3) { ASSERT_EQ(5, add(2, 2)); }
実行結果。
[==========] Running 3 tests from 1 test case. [----------] Global test environment set-up. [----------] 3 tests from AddTest [ RUN ] AddTest.Test1 [ OK ] AddTest.Test1 [ RUN ] AddTest.Test2 [ OK ] AddTest.Test2 [ RUN ] AddTest.Test3 ex2.cpp:20: Failure Value of: add(2, 2) Actual: 4 Expected: 5 [ FAILED ] AddTest.Test3 [----------] Global test environment tear-down [==========] 3 tests from 1 test case ran. [ PASSED ] 2 tests. [ FAILED ] 1 test, listed below: [ FAILED ] AddTest.Test3 1 FAILED TEST
テストケースAddTest
、テストTest3
でテストが失敗したことが表示されます。
テストに対してメッセージを追加したい場合、アサートマクロを出力ストリームのように使ってメッセージを「挿入」することができます。
コードの一部をさらに次のように書き換えます。
TEST(AddTest, Test3) { ASSERT_EQ(5, add(2, 2)) << "TEST add(2, 2) FAILED!!"; }
実行結果(該当部分のみ)。
[ RUN ] AddTest.Test3 ex2.cpp:20: Failure Value of: add(2, 2) Actual: 4 Expected: 5 TEST add(2, 2) FAILED!! [ FAILED ] AddTest.Test3
追加したメッセージが表示されているのがわかります。
このメッセージは、テストがパスしたときには表示されません。
main関数の書き方
説明が前後しましたが、テストを実行するためのmain
関数の基本的な書き方です。
int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
テストはまず::testing::InitGoogleTest
関数で初期化します。引数はmain
関数の引数を渡します。
引数は、googletest用のオプションを解析して初期化に利用した後、googletest用のオプションを取り除いた形に書き換えられます。
例えば。
./sample1 --gtest_color=yes a --gtest_filter=*.Test1 a b c
と実行した場合、main
関数の引数は7つですが(実行ファイル名含む)、::testing::InitGoogleTest
関数を通したあとでは、./sample1 a a b c
の5つになっています。
(オプションについては後述)
テストはRUN_ALL_TESTS
マクロで実行されます。このマクロは終了コードを返すのでmain
関数の戻り値としてその値を返すようにします。