私の質問(入院患者さんへ)
google-mock のマッチャーが与えられたので、それを文字列に記述したいと思います。例えば:
std::string description = DescribeMatcher(Ge(0)) // puts "size is > 0" in the string
誰もそれを行う簡単な方法を知っていますか? googlemock のドキュメントには何も見つかりませんでした。私はこのように自分でやった:
template<typename T, typename S>
std::string DescribeMatcher(S matcher)
{
Matcher<T> matcherCast = matcher;
std::ostringstream os;
matcherCast.DescribeTo(&os);
return os.str();
}
バックグラウンド
別のマッチャーに基づいた独自のマッチャーを作成したいと考えています。私のマッチャーは、指定されたサイズのファイルの名前を表す文字列と一致します。
MATCHER_P(FileSizeIs, sizeMatcher, std::string("File size ") + DescribeMatcher(sizeMatcher))
{
auto fileSize = fs::file_size(arg);
return ExplainMatchResult(sizeMatcher, fileSize, result_listener);
}
以下にその使用例を示します。
EXPECT_THAT(someFileName, FileSizeIs(Ge(100)); // the size of the file is at-least 100 bytes
EXPECT_THAT(someFileName, FileSizeIs(AllOf(Ge(200), Le(1000)); // the size of the file is between 200 and 1000 bytes
問題は MATCHER_P マクロの最後の引数にあります。FileSizeIs
の説明は の説明に基づいてほしいsizeMatcher
。ただし、googlemock 内でそのような関数が見つからず、自分で作成する必要がありました。