Smile Engineering blog ( スマイルエンジニアリング・ブログ )

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

Google Test 備忘録

2018-06-29 18:00:00 | JSP-knowledge

はじめに

Google Test は Google 製の C++ Test Framework です。
導入については良質な解説ページがいくらでもあるので省略、ここではいつのまにか忘れてしまう事柄や、実際に使用して得た知見を備忘のために残します。

備忘録

テストケース名、テスト名について

どちらも有効な C++ の識別子でなければならず、アンダースコア(_)を使用してはいけません。Google Test ではテストの名前解決のためにアンダースコア(_)を用いて名前を連結しており、ユーザがこれに干渉するのを避けるためです。よって、テストケース名、テスト名は必然的に Camel Case(Pascal Case)となります。

参考: なぜ,テストケース名やテスト名にアンダースコアを利用してはいけないのでしょうか?

テストを一時的に無効にする

テストに DISABLED_ プレフィックスをつけることにより、テストを一時的に無効化することができます。これはテストケースにも有効です。テストケース名はすなわちテストフィクチャ(クラス)名ですので昨今の IDE であれば rename 機能で属するテストを一括で無効化できます。

テスト実行後に DISABLED なテスト(実行しなかったテスト)がレポートされるので、#if 0 で無効化するよりも安全です。

参考: テストを一時的に無効にする

メッセージ出力

ユーザ定義の失敗メッセージを出力するには、 <<演算子 を用いてメッセージをストリームに出力します。

メッセージ出力の例:

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length"; for (int i = 0; i < x.size(); ++i) { EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i; } 

明示的な成功と失敗

FAIL() は致命的な失敗を生成します。ADD_FAILURE() および ADD_FAILURE_AT() は致命的ではない失敗を生成します。プログラムの制御フローによって成功/失敗を判断するときに使用します。

制御フローによって判断する例:

switch(expression) { case 1: ... some checks ... case 2: ... some other checks ... default: FAIL() << "We shouldn't get here."; 

SUCCEED() は成功を生成します。テスト全体を成功させるわけではなく、テスト実行時にそこに含まれるすべてのアサーションが失敗しなかった場合にのみ、そのテスト全体が成功したとみなします。

参考: 明示的な成功と失敗

Private メンバのテスト

private なクラスメンバはそのクラスや friend クラスからのみアクセス可能です。クラスの private メンバにアクセスするにはテストフィクスチャをそのクラスの friend に宣言して、フィクスチャクラスにアクセサを定義します。

実装例:

#ifdef WITH_GTEST #include"gtest/gtest_prod.h" #endif template <class T, int N=10> class Stack { T data_[N]; int index_; #ifdef WITH_GTEST friend class StackTestF; #endif ... 
class StackTestF : public ::testing::Test { protected: template <class T> autoget_index(T& s){ return s.index_; } ... 

参考: Private クラスメンバ

テストの部分的な実行

デフォルトでは、Google Test はユーザが定義したすべてのテストを実行します。GTEST_FILTER 環境変数、または --gtest_filter フラグでフィルタ文字列を設定するとこれにマッチしたテストケース、テストを実行します。

フラグ(フィルタ文字列)の指定例:

参考: テストの部分的な実行ヘルプを表示するサポートされているフラグと使い方の一覧をみるにはテストプログラムに --help フラグをつけて実行します。

フラグ(フィルタ文字列)説明
./foo_test フラグの指定なし。すべてのテストを実行する
./foo_test —gtest_filter=* * は任意の文字列にマッチ。すべてのテストを実行する
./foo_test —gtest_filter=FooTest.* テストケース FooTest 内の全てのテストを実行する
./foo_test —gtest_filter=*Null*:*Constructor* 完全な名前に "NULL"、または "Constructor" を含むテストを全て実行する
./foo_test —gtest_filter=-*DeathTest.* Death テスト 以外 を実行する
./foo_test —gtest_filter=FooTest.*-FooTest.Bar テストケース FooTest 内の全てのテストを実行する。ただし、FooTest.Bar は除く


monipet
  動物病院の犬猫の見守りをサポート
  病院を離れる夜間でも安心

ASSE/CORPA
  センサー、IoT、ビッグデータを活用して新たな価値を創造
  「できたらいいな」を「できる」に

OSGi対応 ECHONET Lite ミドルウェア
  短納期HEMS開発をサポート!

GuruPlug
  カードサイズ スマートサーバ

株式会社ジェイエスピー
  横浜に拠点を置くソフトウェア開発・システム開発・
  製品開発(monipet)、それに農業も手がけるIT企業

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
« データ分析手法(クロス集計... | トップ | サンプリング周波数とビット... »
最近の画像もっと見る

コメントを投稿

JSP-knowledge」カテゴリの最新記事