Google TestでのMatcherの活用

ちょっと前に「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()で活用できるものは限定的ですが、高機能で比較的使いやすいので、選択肢の一つとして覚えておくと良いと思います。