c++ 如何测试结构体中作为引用的字段

oogrdqng  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(104)

使用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

roejwanj

roejwanj1#

你不能。如果你在Thing中有get/set,试着检查Property而不是Field。一个很好的例子,你期望const T&T,但它不是。问题是存储在地址x的引用a是某个内存y中某个变量i的别名。所以如果你指向引用ax,它不是你想要的变量i的地址。

相关问题