gpt4 book ai didi

c++ - 海龟模型 : MOCK_EXPECT fails if mocked class method returns a value

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:06 27 4
gpt4 key购买 nike

我在董事会潜伏了很长时间,不用说你们是最棒的,我很感激你们一直以来挽救了我的工作。这是我第一次在这里发帖,希望不会搞砸。

我正在为 Linux(虚拟化 Ubuntu 16.04 amd_64)编写一个 C++ Boost 应用程序,并使用 Turtle Mock 作为模拟框架,使用 Boost Test 作为测试框架。当我尝试测试一个使用依赖注入(inject)技术的类时,我模拟了需要提供给测试类的类,这样我就可以验证它们的调用顺序。到目前为止一切顺利,但问题来了。 我正在使用 MOCK_BASE_CLASS(MockAClass, AClass) 来覆盖真实 AClass 的虚拟方法,并使用新的 MockAClass 来继续我的测试。假设AClass有一个虚方法int getTest(int),MockAClass有MOCK_METHOD(getTest, 1, int(int)),在为MockAClass对象的getTest方法设置期望和返回值,并调用该方法后,期望在大多数情况下,永远不会验证 MOCK_EXPECT(objMockAClass.getTest).at_least(1) 。我可以控制返回值,但调用从未在发生时得到验证。这仅在函数返回值时发生(例如,如果函数为 void getTest(int),则验证将通过)。

我附上了我的问题的简单 PoC,它会在我的系统上失败。

class AClass
{
public:
virtual int getTest(int a) {return 0}
}

MOCK_BASE_CLASS (MockAClass, AClass)
{
MOCK_METHOD(getTest, 1, int(int));
}

BOOST_AUTО_TEST_CASE(SomeClassFunctionality)
{

MockAClass objMockAClass;

MOCK_EXPECT(objMockAClass.getTest).returns(1);
MOCK_EXPECT(objMockAClass.getTest).at_least(1);
objMockAClass.getTest(1);

}

最佳答案

MOCK_EXPECT(objMockAClass.getTest).returns(1);
MOCK_EXPECT(objMockAClass.getTest).at_least(1);

这其实是两个期望。第一个表示“每次调用 getTest 时返回 1”,第二个表示“必须至少调用一次 getTest”。问题是第一个将始终匹配,因此第二个将没有机会被触发。

关于c++ - 海龟模型 : MOCK_EXPECT fails if mocked class method returns a value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39890131/

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