Google Testを使う

投稿者: | 2017/10/20 金曜日

GoogleのC++用のテストフレームワーク。これを使うと何が嬉しいのか
・出力がきれい
・デフォルトでいろんなコマンドラインをつけてくれる
・コマンドラインでテストの制御ができる
・パラレルで実行できる(多分)

しかしGUIアプリの場合はテストは難しいのでここではスルー。テストはあくまで機能として分離がし易いものをテストする段階。付属のGoogleMockなどをつかって、Mockオブジェクトを作り分離させるために頑張る方法もあるのだろうがスルー。

実験

ここでは既存の自作テストプロジェクトをGoogleTestに置き換えていくことを想定。別に新規に追加しても良い。Windows, VS2013, C++/CLIプロジェクト

git submoduleで追加

ソリューションのフォルダで以下を実行して、googletestを持ってくる。べつにダウンロードしてもいい。

テストプロジェクトの設定

テストプロジェクトにgoogletestのソースコードを追加する。テストプロジェクトがなければコンソールアプリで作る。

まず、googletest\googletest\src\gtest-all.ccをプロジェクトのソースコードに追加。このファイルは必要なソースをincludeしてこのファイルだけで全部ビルドできる。

次にプロジェクトのインクルードパスに以下の2つを追加

これで準備が整ったのでmain.cpp(自分のファイル)にテストコードを書く。

InitGoogleTestは最初に書いたようにコマンドラインを処理してくれる。RUN_ALL_TESTSはこちらが定義したテストを実行する。今はまだ何も定義してない。

テストの定義

以下のように書く。

TESTマクロは2つの引数を取る。最初の引数はテストケースと呼ばれていて、テストを大きくカテゴライズしたもの、次の引数はそのカテゴリー内のテスト。1つのクラスをテストケースと考えてその中のメンバ関数をテスト名と考えてもいいかもしれない。

テストコード内でマクロを書く

テストコード内でテスト用のマクロを書く。これに引っかかるとテストに失敗するが、いろんな失敗のさせ方があるらしい。EXPECTは失敗しても続行の失敗(のはず)。ASSERTは失敗すると止める。

コマンドラインのチェック

ここで一旦コーディングをやめて、コマンドラインを試してみる。-hでヘルプを見れる。

–gtest_list_tests

オプション無しでテスト実行

GoogleTestをプロジェクトに追加しておくと、自分がテストするだけでなく、他人がプロジェクトの内容を知ることもできるし、実行ファイルを生成するので、どのように動くのかもわかって便利。

このようにテストをどんどん追加していくと、持つべきデータや初期化作業が共通化してくるので、これをFixtureと読んでおく。このFixture付きのテストがTEST_F。

TEST_F

以下の普通のTESTがあるとする。

これをTEST_Fに置き換えたのが以下。

TEST_Fの中でclassのインスタンスにアクセスできる。このクラスの初期化と終了処理はSetUpとTearDownのオーバーライドで行う。ちなみにこのクラスはテストごとに作られて、インスタンスは共通ではない。

まだ色々あるが終了。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です