gpt4 book ai didi

c++ - 如何验证传递给模拟函数的参数的派生类型

转载 作者:行者123 更新时间:2023-12-01 14:44:53 24 4
gpt4 key购买 nike

我有一个基类和两个派生类,如下所示:

class Base { ... };
class DerivedA : public Base { ... };
class DerivedB : public Base { ... };

我还有一个正在模拟的接口(interface)类(使用 Google Mock),如下所示:
class MockSomeInterface : public SomeInterface
{
public:
MOCK_METHOD1(someMethod, void(Base* basePtr));
};

我可以期望像这样调用模拟方法,根本不验证调用中的参数:
EXPECT_CALL(mockSomeInterfaceObj, someMethod(_))
Times(2);

我想做的是验证给 someMethod 的参数的类型。 , 检查它实际上是用 DerivedA* 调用的一次和一个 DerivedB*一次,而不是使用任何参数的两次。

最佳答案

您可以为此编写匹配器函数。然后,您的期望将如下所示

{
InSequence s;
EXPECT_CALL(mockSomeInterfaceObj, someMethod(IsDerivedA()))
Times(1);
EXPECT_CALL(mockSomeInterfaceObj, someMethod(IsDerivedB()))
Times(1);
}

如果您定义了以下匹配器函数:
MATCHER(IsDerivedA, "")
{
if (arg == NULL)
{
return false;
}
DerivedA* derived = dynamic_cast<DerivedA*>(arg);
if (derived == NULL)
{
*result_listener << "is NOT a DerivedA*";
return false;
}
return true;
}

MATCHER(IsDerivedB, "")
{
if (arg == NULL)
{
return false;
}
DerivedB* derived = dynamic_cast<DerivedB*>(arg);
if (derived == NULL)
{
*result_listener << "is NOT a DerivedB*";
return false;
}
return true;
}

请注意,如果它不是指针参数而是引用, dynamic_cast将抛出 std::bad_cast而不是返回 NULL , 在类型不匹配的情况下 ( http://en.cppreference.com/w/cpp/language/dynamic_cast)。

关于c++ - 如何验证传递给模拟函数的参数的派生类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33435912/

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