我正在尝试使用 HippoMock 模拟接口,以便在使用所述接口的类中使用。我构建了一个模拟对象并设置了 exceptCallOverload,一切都编译得很好。但是,我正在测试的类调用了模拟对象,它调用了 mock::NotImplemented 函数。
此外,我正在模拟的例程接受对接口的引用,但传入的对象存储在 shared_ptr 中。如果我使用 .With 并传递 shared_ptr 对象,我得到一个错误报告 comparer::compare can't match template parameters,这是可以理解的。因此,如果我只是传入对接口的引用,我会得到一个错误,不能实例化纯虚拟类。
在使用 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);
}