gpt4 book ai didi

c++ - 我可以使用 google mocks 来检查方法参数而不提前设置期望值吗?

转载 作者:太空狗 更新时间:2023-10-29 21:39:29 24 4
gpt4 key购买 nike

我有这样一种情况,我想检查是否使用参数 X 调用了模拟对象方法,但是测试仅在调用模拟后 才能访问 X,因此我无法设置预先调用 EXPECT_CALL。

例如

// The class I'm testing.
class Maker
{
void register(Listener& lis);
Obj& make()
{
// make new Obj o
// call created(o) on registered Listener
// return o
}
}

class Listener
{
virtual void created(Obj& o) = 0;
}

// The test
Listener lis;
Maker maker;
maker.register(lis);

Obj& o = maker.make();

// Check that lis was invoked using param o...how?

我可以用 google mocks 做这个吗?使用谷歌模拟执行此操作的最优雅/可读的方式是什么?

显然我可以制作自己的 MockListener 来记录调用参数,而不是使用 google mocks。但我希望 google mocks 能够提供一种更具可读性的机制,类似于 EXPECT_CALL。

最佳答案

您可以使用 SaveArg<N> 保存参数值的操作 Listener::created(Obj&)被调用,因此您可以将其值与 maker.make() 返回的值进行比较之后。

这将要求您为类 Obj 提供相等运算符,即 bool operator==(const Obj&, const Obj&) .

你的测试看起来像这样:

class ListenerMock : public Listener
{
public:
MOCK_METHOD1(created, void(Obj&));
};

TEST(MakerTest, make_registersObject)
{
ListenerMock lis;
Maker maker;
maker.register(lis);

Obj createdArg;
EXPECT_CALL(lis, created(_))
.Times(1)
.WillOnce(SaveArg<0>(&createdArg));

Obj& o = maker.make();

ASSERT_EQ(createdArg, o);
}

关于c++ - 我可以使用 google mocks 来检查方法参数而不提前设置期望值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com