使用googletest,我如何测试引用类型的struct的值?
给定以下结构:
struct Thing {
const std::string& a;
const std::string& b;
};
现在我想测试回调中一个成员的值。
TEST(Test, test1)
{
testing::StrictMock<testing::MockFunction<void(const Thing &)>> callback;
Thing t {"aaa", "bbb"}; // Note, this is simplified, in the real world I do not have direct access to t.
{
EXPECT_CALL(callback, Call(testing::Field(&Thing::b, testing::Eq("bbb"))));
callback.AsStdFunction()(t);
}
}
但是,这不会编译:error: cannot create pointer to reference member 'Thing::b'
如果我把Thing
结构体的成员设为非引用,问题就解决了,但是在我的情况下我不能这么做,在我的测试中我只想检查一个字段。
完整示例:https://godbolt.org/z/9cb5MoMP9
1条答案
按热度按时间roejwanj1#
你不能。如果你在
Thing
中有get/set,试着检查Property
而不是Field
。一个很好的例子,你期望const T&
是T
,但它不是。问题是存储在地址x
的引用a
是某个内存y
中某个变量i
的别名。所以如果你指向引用a
的x
,它不是你想要的变量i
的地址。