gpt4 book ai didi

c++ - HippoMock 总是抛出 NotImplemented

转载 作者:行者123 更新时间:2023-11-28 02:35:38 25 4
gpt4 key购买 nike

我正在尝试使用 HippoMock 模拟接口(interface),以便在使用所述接口(interface)的类中使用。我构建了一个模拟对象并设置了 ExceptCallOverload,一切都可以正常编译。然而,我正在测试的类调用了模拟对象,它调用了 mock::NotImplemented 函数。

此外,我正在模拟的例程接受对接口(interface)的引用,但在 a 中传递的对象存储在 shared_ptr 中。如果我 wall .With 并传递 shared_ptr 对象,我得到一个错误报告 comparer::compare can't match template parameters,这是可以理解的。因此,如果我只是传递对接口(interface)的引用,我会得到一个错误,不能实例化纯虚拟类。

我觉得这让我在使用 HippoMark 时进退两难。

一个小例子:

class objectA_interface
{
public:
virtual double getDouble() = 0;
};

class objectB_interface
{
public:
virtual double getDouble() = 0;
};

class test_interface
{
public:
virtual void fun(objectA_interface&) = 0;
virtual void fun(objectB_interface&) = 0;
};

void do_something()
{
std::shared_ptr<objectA_interface> objectA;
std::shared_ptr<objectB_interface> objectB;

MockRepository mocks;
test_interface* mock_interface = mocks.Mock<test_interface>();

//error C2259: 'object_interface' : cannot instantiate abstract class
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(*objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(*objectB);

//error C2665: 'HippoMocks::comparer<A>::compare' : none of the 2 overloads could convert all the argument types
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectA_interface&))&test_interface::fun).With(objectA);
mocks.ExpectCallOverload(mock_interface, (void (test_interface::*)(objectB_interface&))&test_interface::fun).With(objectB);
}

最佳答案

您不能将 shared_ptr 作为平面引用传递给任何函数。这解释了为什么第二次调用不起作用 - shared_ptr 不是引用。

第一个调用应该有效,但看起来 .With 正在尝试制作对象的拷贝而不是使用引用。您可以使用 Hippomocks::byRef 来明确指示它应该使用 this 作为引用而不是可复制的实例,以便它将使用您的实例。这样做会隐式地导致在实际调用发生之前超出范围的临时对象可能崩溃。

根据 test_ref_args.cpp 中的测试代码,您的具体情况:

class IRefArg {
public:
virtual void test() = 0;
};

MockRepository mocks;
IK *iamock = mocks.Mock<IK>();
IRefArg *refArg = mocks.Mock<IRefArg>();

mocks.ExpectCall(iamock, IK::l).With(byRef(*refArg));
iamock->l(*refArg);

关于c++ - HippoMock 总是抛出 NotImplemented,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576135/

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