在我们的项目中,我们使用 Google Mock,但在多个地方,我们在生产代码中进行构造,只是为了确保类是“可模拟的”。我们这样做是因为我们希望获得 Google Mock 的好处,但另一方面我们更希望拥有更优化的生产代码。以下情况是我们经常做的事情,并且想摆脱。
class A{
public:
void doSomething(); //Does something with _someB
void setSomeB(B* mockedB); //This is only here for GMock
private:
B* _someB; //This should not be a pointer, it is a pointer only for GMock
}
如您所见,这只是一个简化的示例,我省略了细节。基本上我们想摆脱 B 作为指针。我们将它作为指针的原因是我们可以在我们的测试代码中继承 B(模拟它)并使用该 setter 设置它。
有没有办法避免这种情况?我们不能让 B 在班级范围内吗?
谢谢