4

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

EXPECT_CALL(obj, method(_, _)).Times(1).WillOnce(EXPECT_THAT(true, Eq(1)));

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

谢谢

4

1 回答 1

6

您误解了matchers 的文档

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

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

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

这并不是说它EXPECT_THAT本身就是一个匹配器。所以你不能做你正在尝试的事情,而只能做类似的事情:

EXPECT_THAT(true, testing::Eq(1));

或者

EXPECT_CALL(obj, method(testing::_, testing::Eq(1))).Times(1);
于 2012-12-18T15:12:31.570 回答