如何为输入参数匹配联合中元素的值,例如 - 如果我模拟具有以下签名的方法 -
struct SomeStruct
{
int data1;
int data2;
};
void SomeMethod(SomeStruct data);
如何匹配该方法的模拟在参数中使用正确的值调用?
原文由 NiladriBose 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何为输入参数匹配联合中元素的值,例如 - 如果我模拟具有以下签名的方法 -
struct SomeStruct
{
int data1;
int data2;
};
void SomeMethod(SomeStruct data);
如何匹配该方法的模拟在参数中使用正确的值调用?
原文由 NiladriBose 发布,翻译遵循 CC BY-SA 4.0 许可协议
也许没用,因为很久以前就已经回答了这个问题,但这里有一个适用于任何结构且不使用 MATCHER 或 FIELD 的解决方案。
假设我们正在检查:methodName(const Foo& foo):
using ::testing::_;
struct Foo {
...
...
};
EXPECT_CALL(mockObject, methodName(_))
.WillOnce([&expectedFoo](const Foo& foo) {
// Here, gtest macros can be used to test struct Foo's members
// one by one for example (ASSERT_TRUE, ASSERT_EQ, ...)
ASSERT_EQ(foo.arg1, expectedFoo.arg1);
});
原文由 BWD 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
在详细阅读了 Google 模拟文档之后,我解决了 定义匹配器 部分中记录的问题。 (一个例子会很棒!)
因此解决方案是使用
MATCHER_P
宏来定义自定义匹配器。所以对于匹配SomeStruct.data1
我定义了一个匹配器:为了符合预期,我使用了这个自定义宏,如下所示:
这里,
expectedSomeStruct
是我们期望的structure.data1
的值。请注意,正如其他答案(在这篇文章和其他文章中)所建议的那样,它需要被测单元进行更改以使其可测试。那不应该是必要的!例如超载。