【发布时间】:2014-03-07 11:46:06
【问题描述】:
我的课程看起来有点像这样:
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* 指针来解决这个问题,但如果可能的话,我也想避免这种情况。)
我无法想象我是第一个尝试完成此任务的人,但我无法找到如何做到这一点。有办法吗?如果是这样,你是怎么做的?
【问题讨论】:
标签: c++ unit-testing constructor mocking abstract-class