gpt4 book ai didi

c++ - 我可以在设置期望后复制一个谷歌模拟对象吗?

转载 作者:行者123 更新时间:2023-11-30 03:48:42 26 4
gpt4 key购买 nike

我想在我的测试夹具类中添加一个实用函数,它将返回一个具有特定期望/操作集的模拟。

例如:

class MockListener: public Listener
{
// Google mock method.
};

class MyTest: public testing::Test
{
public:
MockListener getSpecialListener()
{
MockListener special;
EXPECT_CALL(special, /** Some special behaviour e.g. WillRepeatedly(Invoke( */ );
return special;
}
};

TEST_F(MyTest, MyTestUsingSpecialListener)
{
MockListener special = getSpecialListener();

// Do something with special.
}

不幸的是我得到:

error: use of deleted function ‘MockListener ::MockListener (MockListener &&)’

所以我假设模拟不能被复制?为什么,如果是的话,还有另一种优雅的方法来获得一个函数来制造一个已经设置好期望/ Action 的现成模拟吗?

显然我可以让 getSpecialListener 返回一个 MockListener&,但是这样它就不必要成为 MyTest 的成员,并且因为只有一些测试使用那个特定的模拟(如果测试是,我应该只填充模拟行为使用它)它会不太干净。

最佳答案

Mock 对象是不可复制的,但是您可以编写一个工厂方法来返回指向新创建的 mock 对象的指针。为了简化对象所有权,您可以使用 std::unique_ptr

std::unique_ptr<MockListener> getSpecialListener() {
MockListener* special = new MockListener();
EXPECT_CALL(*special, SomeMethod()).WillRepeatedly(DoStuff());
return std::unique_ptr<MockListener>(special);
}

TEST_F(MyTest, MyTestUsingSpecialListener) {
std::unique_ptr<MockListener> special = getSpecialListener();

// Do something with *special.
}

关于c++ - 我可以在设置期望后复制一个谷歌模拟对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33043640/

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