めも

これはメモ。

googletestをWindows上のeclipseにて実行

めも。

セットアップ

Windows10にて。 必要なものをインストール。

googletestビルド

googletestはダウンロード後、ビルドする。

stackoverflow.com

eclipse でテストを実行

eclipse側設定

  1. [設定]>[GCC C++ Compiler]>[インクルード]>[インクルードパス]に ${workspace_loc:/テストする対象があるディレクトリ名}
  2. [設定]>[GCC C++ Compiler]>[インクルード]>[インクルードパス]に ビルドしたgoogletestのディレクトリへのパス\include
  3. [設定]>[MinGW C++Linker]>[ライブラリ]>[ライブラリ]に gtest を追加 (他必要なものを適宜追加)
  4. [設定]>[MinGW C++Linker]>[ライブラリ]>[ライブラリ検索パス]に ビルドしたgoogletestのディレクトリへのパス\lib を追加 (他必要なものを適宜追加)

テストプログラム

RUN_ALL_TESTS()ですべてのテストを実行する。最も簡単な Main.cpp は以下に。 テスト対象をインクルードしていないので、実際には #include XXX.h などの記述が入りテストを行う。

#include "gtest\gtest.h"

TEST()
{
    /* テスト内容を記述 */
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

ビルド後、[実行]>[実行の構成]>[C/C++ Unit]>[新規構成]として新しい実行の構成をつくる。 その後、[C/C++ Testing]欄の Test Runner を [Google test runner] に切り替えて実行をする。

googletest記述例

基本的な記述例はgoogletest/samplesにある。 他の各種アサーションについては

に説明あり。 アサーションには ASSERT_*EXPECT_*の二種類があり、ASSERT_*は致命的なエラーとして関数の実行を中止する。 EXPECT_*での失敗( 例:EXPECT_EQ(a, b):a==bになってほしいが、実際はそうならなかった )は失敗しても実行を中断しない。

自分で定義したエラーメッセージを出力する場合は << で付け足せばいい。

EXPECT_EQ(1+1, 3) << " 1+1 shoud be 2" << i;

例えばfloat の比較は EXPECT_FLOAT_EQ(expected, actual)で行い、4ULPs(unit in the last place)の誤差まで許容する

Google C++ Mocking Framework

mocking frameworkと合わせて使いたい。

github.com

クックブックの日本語訳版は クックブック — Google Mock ドキュメント日本語訳