在EXPECT_CALL中使用google mock的EXPECT_THAT?

Ral*_*ang 4 c++ mocking gmock

我正在使用谷歌模拟.该文档说我们可以在EXPECT_CALL或ON_CALL中使用EXPECT_THAT,但是像这样的代码似乎没有编译:

EXPECT_CALL(obj, method(_, _)).Times(1).WillOnce(EXPECT_THAT(true, Eq(1)));
Run Code Online (Sandbox Code Playgroud)

我知道EXPECT_THAT是一个宏,所以它扩展到一些不应该出现在那里的语句.那么"在EXPECT_CALL中使用EXPECT_THAT"是什么意思呢?怎么做?

谢谢

Fra*_*ser 6

您误解了匹配器文档:

匹配器匹配单个参数.您可以在ON_CALL()或EXPECT_CALL()中使用它,或使用它直接验证值

然后,文档继续举例说明如何使用匹配器验证值:

EXPECT_THAT(value, matcher)断言value匹配matcher.

这并不是说这EXPECT_THAT本身就是一个匹配者.所以你不能做你正在尝试的东西,但只有更像是:

EXPECT_THAT(true, testing::Eq(1));
Run Code Online (Sandbox Code Playgroud)

要么

EXPECT_CALL(obj, method(testing::_, testing::Eq(1))).Times(1);
Run Code Online (Sandbox Code Playgroud)