在EXPECT_CALL中使用谷歌模拟的EXPECT_THAT?

Use google mock's EXPECT_THAT in EXPECT_CALL?

本文关键字:EXPECT 模拟 谷歌 THAT CALL      更新时间:2023-10-16

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

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

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

谢谢

您误解了匹配器的文档:

匹配

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

然后,文档继续给出一个示例,说明如何使用匹配器来验证值:

EXPECT_THAT(value, matcher) 断言valuematcher匹配。

这并不是说EXPECT_THAT本身就是一个匹配者。 所以你不能做你正在尝试的事情,而只能做一些更像的事情:

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

EXPECT_CALL(obj, method(testing::_, testing::Eq(1))).Times(1);