我的课程看起来有点像这样:
class TheClassIWantToTest {
public:
TheClassIWantToTest(const IInput& input) {
setLocalParameter(input.getParameter());
}
// other stuff, e.g. setLocalParameter, defined below
}
其中输入参数定义为
class IInput {
virtual double getParameter() const = 0;
}
我还在我的系统中使用了IInput
的实现,以及使用Google Mocks创建的模拟实现。
现在,我希望能够做类似
的事情MockInput mock; // MockInput : IInput
TheClassIWantToTest sut(mock);
在我的测试中,在做
时RealInput theRealStuff; // RealInput : IInput
TheClassIWantToTest(theRealStuff);
但是当我尝试编译时,我得到的错误是没有定义方法TheClassIWantToTest(MockInput)
。我试图为IInput
定义一个MockInput
的复制构造函数,然后我得到error: definition of implicitly-declared IInput(const MockInput&)
,因为我没有在类声明中定义该方法。
但是,我宁愿避免在基类定义中声明复制构造函数,因为这意味着在我的生产代码中定义测试方法。 (我意识到我可以通过仅使用IInput*
指针来解决这个问题,但如果可能的话,我也想避免使用它。)
我无法想象我是第一个尝试完成此任务的人,但我无法找到如何做到这一点。有办法吗?如果是这样,你怎么做?
答案 0 :(得分:1)
尝试动态演员:
RealInput theRealStuff; // RealInput : IInput
TheClassIWantToTest(dynamic_cast<const IInput&>(theRealStuff));