ちょっと前に「Google TestでJUnitのようなMatcherを利用できるらしいけど、情報が少ない」という話があったので、今回まとめたいと思います。
Google TestのMatcher
まず現時点でのGoogle TestはMatcherのAPIを持っていません。
ただGoogle製のC++向けMockライブラリであるGoogle Mockが、Google Test向けにMatcherに対応したアサーションメソッドを提供しています。それを利用することでGoogle Test上でMatcherを書けるようになります。
なおそのGoogle MockのアサーションメソッドはASSERT_THAT()、EXPECT_THAT()で、その命名の通り、JUnitのassertThatのように利用します。例を示します。
#include <gtest/gtest.h> #include <gmock/gmock.h> using ::testing::MatchesRegex; using ::testing::Ge; TEST_F(HogeTest, Hoge) { ... EXPECT_THAT(testTarget1, MatchesRegex("fo+!")); EXPECT_THAT(testTarget2, Ge(3)); } ...
上記では、MatchesRegex()が正規表現による比較を実現するMatcher、Geが数の大小比較を実現するMatcherです(その他のMatcherは http://opencv.jp/googlemockdocs/index.html が詳しいです)。これらはGoogle Mockのモッキング機能を使わなくとも、通常のGoogle TestのコードにてアサーションメソッドをEXPECT_THAT()にするだけで使用可能になります。
その他、Google MockはカスタムMatcherやMatcherの組み合わせをサポートするAPIも色々用意してくれています。
Google MockのMatcherはモッキング用途のものが多く、EXPECT_THAT()で活用できるものは限定的ですが、高機能で比較的使いやすいので、選択肢の一つとして覚えておくと良いと思います。