C++ - 在单元测试中创建间谍
C++ - Creating a Spy in unit tests
我有一些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:如果没有,有没有一种快速简便的方法来重组我的代码我可以利用模拟吗?
通过执行以下操作解决:
class IOtherMethodAdapter
{
public:
virtual int otherMethod() = 0;
}
class OtherClassOtherMethodAdapter : public IOtherMethodAdapter
{
public:
int otherMethod() { return obj_->otherMethod(); }
private:
OtherClass *obj_;
}
现在我在 MyClass
中使用指向 IOtherMethodAdapter
的指针而不是 OtherClass
并且为了测试我只是将接口的实现初始化为 stubbed/mock 对象。如果还有其他方法,请随时 post 该解决方案。
我有一些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:如果没有,有没有一种快速简便的方法来重组我的代码我可以利用模拟吗?
通过执行以下操作解决:
class IOtherMethodAdapter
{
public:
virtual int otherMethod() = 0;
}
class OtherClassOtherMethodAdapter : public IOtherMethodAdapter
{
public:
int otherMethod() { return obj_->otherMethod(); }
private:
OtherClass *obj_;
}
现在我在 MyClass
中使用指向 IOtherMethodAdapter
的指针而不是 OtherClass
并且为了测试我只是将接口的实现初始化为 stubbed/mock 对象。如果还有其他方法,请随时 post 该解决方案。