google test をCygwinに入れて嫁を確認した。

どうもです。
予告通りのgtestを導入した際のメモメモ。
色つき出力の所までを書く予定。

環境

手順

gtest 導入の条件として,Cygwinの場合,
バージョンが1.5.25以上を必要とするようなので,
Cygwin のバージョンが1.5系なら,この際に1.7系にしちゃいましょう。
(uname -r でバージョンがわかるはず)

ソースのDL,伸張,そしてビルド

http://code.google.com/p/googletest/
の右側から,好きな圧縮形式のものをDLしましょう。
んで,伸張。
んで,configure
んで,make
んで,make check (ゴリゴリなりますよっと)
んで,make install
デフォルトでは,/usr/local/ 以下にインストールされました。

% wget 'http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2'
# ...
% tar xjf gtest-1.5.0.tar.bz2
# ...
% cd gtest-1.5.0

% ./configure
# ...
% make
# ...
% make check # これはどっちでもいいかも。あたいはやったなり。
# ...
% make install
# ...

ワタシの記憶が確かなら,何も問題なくインストールできたはず。

早速試してみましょう。

サンプルソースコードです。
Meadow 内の shell-modeから実行する場合のポイントは,

::testing::GTEST_FLAG(color) = "yes";

をテストを実行する前に用意することです。
最初色つき表示できないのかなぁと思って,
ソースコード覗いたら,環境変数TERMを見て判断したりしてました。
ほいで,% TERM=xterm ./sample ってするのもありかもねぇとか思ってたけど,
ドキュメントあさったら,書いてあった。
引用させてもらいます。

Colored Terminal Output                                                                            
                                                                                                     
Google Test can use colors in its terminal output to make it easier to
spot the separation between tests, and whether tests passed.
                                                                                                     
You can set the GTEST_COLOR environment variable or set the
--gtest_color command line flag to yes, no, or auto (the default) to
enable colors, disable colors, or let Google Test decide. When the
value is auto, Google Test will use colors if and only if the output
goes to a terminal and (on non-Windows platforms) the TERM environment
variable is set to xterm or xterm-color.
                                                                                                     
Availability: Linux, Windows, Mac.                                                                   

ま,コマンドラインのオプションの方でも大丈夫だと思う。
試してないけど,たぶん,./tmp --gtest_color=yes とかじゃね?
以下を,tmp.ccとします。

#include <string>
#include <gtest/gtest.h>

using namespace std;

string get_yome()
{
  return string("あずにゃんは俺の嫁");
}

TEST(OreOreYome, azunyan)
{
  EXPECT_STREQ("あずにゃんは俺の嫁", get_yome().c_str());
  // 心配なので,もう一回確認しておく
  EXPECT_STREQ("あずにゃんは俺の嫁", get_yome().c_str());
}

TEST(OreOreYome, miochan)
{
  // 心配だから,みおちゃんも嫁な事を確認しておく
  EXPECT_STREQ("みおちゃんも俺の嫁", get_yome().c_str());
  // 本当は,みおちゃんの方が好きです。だからもっかい確認する
  EXPECT_STREQ("みおちゃんも俺の嫁", get_yome().c_str());
}

int main(int argc, char **argv)
{
  ::testing::GTEST_FLAG(color) = "yes";
  ::testing::InitGoogleTest(&argc, argv);

  return RUN_ALL_TESTS();
}

ほいじゃ,コンパイルしましょ。
ライブラリのパスが通ってないので,-Lオプションで指定しました。

% g++ -Wall -W -g -o tmp tmp.cc -lgtest -L/usr/local/lib
テスト結果


色つきで表示されてますね。
ん? あれ? あぁ,みおちゃんも俺の嫁だと期待したけど,
実際は,あずにゃん俺の嫁だったか。そうかそうか。

まとめ

テストした結果,やはりというか,あずにゃん俺の嫁でしたね。
皆さんもGoogle Testを導入して,上記のテストをしてみて確認するのがいいと思います。


クラスを作らなくてもテストをバシバシ書けるのは,非常に便利なのではないのでしょうか。
(cppunit使ったこと無いけど。)
ちゃんとした使い方は,Fixtureだっけ?とか用意して,うんちゃらかんちゃらするとんだと思うけど,
ワタシはC++を勉強している過程で使用しているのでそこまで必要ない。
というか,ドキュメントがしっかりしているので,
必要になったら,読めばわかるはず。
探してないけど,探せば日本語訳もあるのではないでしょうか。


お疲れちゃんです。