2016-12-07 22 views
0

我有一些C++代码如下:C++ - 单位创建间谍测试

class MyClass 
{ 
public: 
    MyClass(OtherClass *obj) 
    { 
     obj_ = obj; 
    } 
    void myMethod() 
    { 
     // Do something 
     int value = obj_->otherMethod(); 
     // Do something else 
    } 
private: 
    OtherClass *obj_; 
} 

我想创建一个单元测试,测试的myMethod()功能。不幸的是,OtherClass是一个外部库,它的方法没有声明为虚拟的(所以我不能继承这些方法并将它们存储在模拟中)。我对Mockito有一些经验,我可能会为此使用间谍。但我似乎无法在C++中找到等价物。

我现在正在使用googletest框架和这个问题的上下文(如果有帮助的话)在ROS中,我实际上试图将它们剔除出tf::TransformListener

问题1:在这种情况下,我有可能不知道并可以利用间谍的选择吗?

问题2:如果没有,有没有快速和容易办法,我调整自己的代码,这样我可以利用一个模拟的?

回答

1

解决执行以下操作:

class IOtherMethodAdapter 
{ 
public: 
    virtual int otherMethod() = 0; 
} 

class OtherClassOtherMethodAdapter : public IOtherMethodAdapter 
{ 
public: 
    int otherMethod() { return obj_->otherMethod(); } 
private: 
    OtherClass *obj_; 
} 

现在我在MyClass,而不是OtherClass使用指针来IOtherMethodAdapter和测试我只是初始化接口的实现为存根/模拟对象。如果有其他方法,请随时发布该解决方案。