エンジニアのソフトウェア的愛情

または私は如何にして心配するのを止めてプログラムを・愛する・ようになったか

Google Test 1.6.0 が正式リリース

RC2が公開されたのでブログでコメントしておこうと思いつつ。うかうかしていたら、あっというまに正式リリース。

最近はC++でまともにプログラミングをしていないのもあって、Google Testもトピックがあったときにちょこっと言及するぐらい。以前まとめを書いたのがバージョン1.3.0のときだから、それから3つもバージョンが上がってしまった。

アナウンスはこちら。04/18付け、日本時間では今朝のリリース。


まだダウンロードしただけでキチンと触れていないんですが、おさらいも兼ねて変更点を書いておきます。せっかくなので1.3.0以降の変更点をまとめて一覧。
ドキュメントやコードを読んでみた内容も合わせて書いてみますが、実際に使ってみた結果ではないので、使用の際にはまずご自身で確認してみてください。
あと。誤訳も多々あると思いますのでそこも割り引いて読んでください(あやまりご指摘いただけたらありがたいです)。

1.6.0での変更点

New feature: ADD_FAILURE_AT() for reporting a test failure at the given source location -- useful for writing testing utilities.

「新機能:テストが失敗した箇所をレポートできるADD_FAILURE_ATマクロを追加」

従来ADD_FAILUREというマクロがあます。このマクロは実行されると必ずテストを失敗させるものです(絶対に選択されないはず条件の箇所に書いて、期待しない条件が発生したばあいの確認などに使います)。ADD_FAILUREマクロは記述されたファイルのファイル名と行番号をレポートしますが、追加されたADD_FAILURE_ATマクロでは任意のファイル名(文字列)と行番号(数値)をレポートできるようです。

New feature: the universal value printer is moved from Google Mock to Google Test.

「新機能:Universal Value PrinterをGoogle MockからGoogle Testへ移動」

わたしは使ったことはないのですが、テストのためのモックを作成するためのフレームワークGoogle Mock」というのがあります。

そこで「Universal Value Printer」というものが用意されているようです。詳細はまだ調べてないのですが挿入演算子operator <<)が定義されていないクラスのインスタンスでも値を出力するためのしくみ…の様子(どうやって?)。これを利用して変更になった仕様があります。このあと出てきます。

New feature: type parameters and value parameters are reported in the XML report now.

「新機能:型パラメータと値パラメータをXMLレポートで出力する」

引数の型情報とかのことでしょうか?あとで要調査。宿題。

A gtest_disable_pthreads CMake option.

「CMakeのオプションにgtest_disable_pthreads追加」

バージョン1.5.0でpthreadライブラリを使えるようになったようなのですが、その利用を抑制するオプションを追加した模様。

Colored output works in GNU Screen sessions now.

GNUスクリーンセッションでカラー出力」

カラー出力できる環境が増えたようですが、GNUスクリーンセッションがなんだかわかってないです。

Parameters of value-parameterized tests are now printed in the textual output.

「Value-Parameterizedテストの内容をテキストで出力する」

Value-Parameterizedテスト」なるものがバージョン1.2.0からあります。同じコードでパラメータだけが違うテストをするときに利用するもののようですが、勉強不足。要調査。宿題。

Failures from ad hoc test assertions run before RUN_ALL_TESTS() are now correctly reported.

RUN_ALL_TESTSが実行される前にアドホックテストのアサーションが失敗したばあいも正しくレポートする」

ここでいうところのアドホックテストってなんでしょう?
というか、RUN_ALL_TESTSの実行前に実行されるテストがあるの?
要調査。宿題。

Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to ostream.

ASSERT_XYEXPECT_XYの引数となる型は挿入演算子をサポートしていなくてもいい」

これまでのバージョンではテストに失敗したとき、そのときの値を出力するために評価される値の型には挿入演算子operator <<)が定義されている必要がありましたが、今回のバージョンからそれが不要になったようです。上記の「Universal Value Printer」というしくみのおかげらしい。要調査。宿題。
関連内容がこのあたりに記載されています。

More complete handling of exceptions.

「より完全な例外のハンドリング」

いままで例外の取りこぼしとかがあったんでしょうか?

GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter name is already used by another library.

「すでにASSERT_XYという名前がほかのライブラリで使われているばあいには、その名前の代わりにGTEST_ASSERT_XYという名前を使うことができる」

Google TestのGoogleグループで「ASSERT_*という名前が衝突して困って、しょうがないからGTEST_ASSERT_*って名前に書き換えて使ってるよ。どうにかならない?」という書き込みが以前ありました。そのときの内容が反映されたようです。たしかに「ASERT_*」「EXPECT_*」という名前はちょっと素朴すぎましたね。

--gtest_catch_exceptions is now true by default, allowing a test program to continue after an exception is thrown.

「例外が発生してもテストを継続するように、--gtest_catch_exceptions有効をデフォルトにした」

Value-parameterized test fixtures can now derive from Test and WithParamInterface separately, easing conversion of legacy tests.

「Value-ParameterizedテストフィクスチャをWithParamInterface<T>から独立してTestから派生できる。従来のテストの変換が容易」


Google Testの用語と英語の両方がわかってないです。要勉強。宿題。

Death test messages are clearly marked to make them more distinguishable from other messages.

「Deathテストのメッセージがほかのメッセージとより明確に区別されるようになった」

Deathテストも前回とばした内容でよく理解してないです。要調査。宿題。

Compatibility fixes for Android, Google Native Client, MinGW, HP UX, PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear), IBM XL C++ (Visual Age C++), and C++0x.

「互換性の修正:Android, Google Native Client, MinGW, HP UX, PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear), IBM XL C++ (Visual Age C++), and C++0x

Androidのソフトの開発でも使えるようになってるんだ。へー。

Bug fixes and implementation clean-ups.

「バグの修正と実装のクリーンアップ」

Potentially incompatible changes: disables the harmful 'make install' command in autotools.

「互換性を失う可能性のある変更:autotoolsを利用する'make install'コマンドを無効にした」

Googleグループでもありましたが、「harmful」(有害)と判断した模様。

1.5.0での変更点

New feature: assertions can be safely called in multiple threads where the pthreads library is available.

「新機能:pthreadライブラリでのマルチスレッドからアサーションを安全に呼び出せるようになった」

New feature: predicates used inside EXPECT_TRUE() and friends can now generate custom failure messages.

「新機能:EXPECT_TRUE(とその仲間)の引数で、失敗時のメッセージのカスタマイズができるようになった」

EXCEPT_TRUEマクロでは、引数の値が真か偽かしか結果として出力されないので、引数で評価された内容を出力させるためには少し手の込んだことをしないといけないと以前のエントリでも書きました
それがもっと簡単に書けるようになったようです。要調査。宿題。

New feature: Google Test can now be compiled as a DLL.

「新機能:DLLとしてGoogle Testをコンパイルできる」

New feature: fused source files are included.

「新機能:fused source filesが含まれている」

fused source fileってナンデスカ?
Google Testをダウンロードすると「fused-src/gtest/」というフォルダがあって、その中に「gtest-all.cc」「gtest.h」「gtest_main.cc」という大きなファイルが格納されています。この3つのファイルだけでGoogle Testが実現できるんようになっている雰囲気があります。
これらのファイルを自分のプロジェクトにコピーして「とけ込ませ」るだけでGoogle Testを利用できるようになるのでしょうか?要調査。宿題。

New feature: prints help when encountering unrecognized Google Test flags.

「新機能:不明なフラグが指定されたらヘルプを表示する」

Experimental feature: CMake build script (requires CMake 2.6.4+).

「実験的機能:CMake用スクリプト(要CMake 2.6.4以上)」

make系のコマンドで、いまの主流ってなんなんでしょうね。CMakeも勉強しておかないといけないなぁ。

Experimental feature: the Pump script for meta programming.

「実験的機能:メタプログラミングのためのpump script」

pump scriptってナンデスカ?
コードを検索してみるとプリプロセサでゴニョゴニョ…。要調査。宿題。

double values streamed to an assertion are printed with enough precision to differentiate any two different values.

「double型の値の比較では、ふたつの値の違いがわかるのに充分な桁数を表示する」

Google Test now works on Solaris and AIX.

SolarisAIXで動作する」

Build and test script improvements.

「ビルドとテストのスクリプトの改善」

Bug fixes and implementation clean-ups.

「バグの修正と実装のクリーンアップ」

Potentially breaking changes:Stopped supporting VC++ 7.1 with exceptions disabled.

「互換性を失う可能性のある変更:例外を無効にしたVC++ 7.1のサポートの停止」

Potentially breaking changes:Dropped support for 'make install'.

「互換性を失う可能性のある変更:'make install'をサポート外にした」

「Stopped supporting」と「Dropped suport」のニュアンスの違いが今ひとつわかってないデス。
stoppedは今回で止めてこれ以降はサポートしないよ、droppedはサポート対象から外しましたよ、ということ?
…やっぱりよくわからない。

1.4.0での変更点

New feature: the event listener API

「新機能:イベントリスナーAPI

テストのイベント(テスト開始、テスト失敗、テスト終了)をフックできる模様。独自のロガーにロギングできるようになるんでしょうか。組み込み環境で使うことを考えると重要な機能。要調査。宿題。

New feature: test shuffling

「新機能:テストのシャッフル」

New feature: the XML report format is closer to junitreport and can be parsed by Hudson now.

「新機能:Hudsonで解釈できるJUnitレポートに近いXMLレポートフォーマット」

New feature: when a test runs under Visual Studio, its failures are integrated in the IDE.

「新機能:Virtual Studio上での実行の際、テストの失敗がIDEに統合される」

IDE上でGoogle Testのテスト失敗を追いかけられるようになったんでしょうか。
Visual Studioは使っていないので、その方面の方にパス。

New feature: /MD(d) versions of VC++ projects.

「新機能:VC++プロジェクトの/MD(d)バージョン」

/MD(d)オプションつきのプロジェクトを用意したということでしょうか。
こちらもその方面の方にパス。

New feature: elapsed time for the tests is printed by default.

「新機能:テストの経過時間の表示をデフォルトでオン」

バージョン1.3.0のデフォルトはオフでした。

New feature: comes with a TR1 tuple implementation such that Boost is no longer needed for Combine().

「新機能:TR1のtupleに対応。Boost.Combineは不要になった」

C++0x(TR1)のtupleを利用するようになったためBoost.Combineが不要になったようです。
コードを見てみると、TR1に対応していない環境のために自前の実装も用意している様子。CMakeのオプションでTR1を使うか、Google Testが自前で用意したコードを使うか指定できるようです。

New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.

「新機能:EXPECT_DEATH_IF_SUPPORTED(とその仲間)を用意」

Deathテスト、これから勉強します。要調査。宿題。

New feature: the Xcode project can now produce static gtest libraries in addition to a framework.

「新機能:フレームワークに追加するスタティックライブラリを提供するXcodeプロジェクトを用意」

「static gtest libraries in addition to a framework」の意味が「フレームワークに追加するスタティックライブラリ」でいいのか自信がない。

Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile, Symbian, gcc, and C++Builder.

「互換性の修正:Solaris, Cygwin, minGW, Windows Mobile, Symbian, gcc, and C++Builder

Bug fixes and implementation clean-ups.

「バグの修正と実装のクリーンアップ」



なんか。宿題がいっぱいになってしまった。

いつか読むはずっと読まない:まだまだ彷徨えます。

ヴィクトリアス」読了。「彷徨える艦隊」全6巻完結。
と思ったら。もう続編が出るようです。原著の方ですけど。「The Lost Fleet:Beyond the Frontier」というシリーズになるようですが、引き続きタイトルに「The Lost Fleet」(彷徨える艦隊)とあので邦訳では通巻になるんでしょうか。
ちなみに、原著者のサイトThe Lost Fleetシリーズのページを見ると、各巻の紹介とともに翻訳にして40ページ分近くの内容が掲載されてます。翻訳と並べて読んでみると結構面白いです。
「艦隊司令長官代行」は「acting fleet commander」の訳なんですが、代行にあたる単語がactingだと初めて知りました。

ちなみに。艦隊(海軍)の「大佐」は「captain」の訳なんですが、大佐が艦長を勤めるので「役職と階級が一致してるのか、なるほどー」などと感心してみたり。だけど「中佐」は「commander」で「はてー?」となってみたり。ちなみに主人公のギアリーは(5巻までは)大佐だけれども艦隊司令官で艦長ではないけれど「Captain Geary」てなわけで、「艦隊司令官ギアリー大佐」と名乗るときは「Captain Geary, fleet commander」となるわけで。へー。


こういうところばかり興味が行くからいっこうに習熟しないのかも。


彷徨える艦隊〈6〉巡航戦艦ヴィクトリアス (ハヤカワ文庫SF)

彷徨える艦隊〈6〉巡航戦艦ヴィクトリアス (ハヤカワ文庫SF)

The Lost Fleet: Beyond the Frontier: Dreadnaught

The Lost Fleet: Beyond the Frontier: Dreadnaught


各国で出版されているThe Lost Fleetの訳本の表紙がなかなか面白い。日本版も掲載されてます。