【发布时间】:2014-05-30 14:31:13
【问题描述】:
我有一个需要模拟的类,但该类有需要模拟的非虚拟方法。我的问题的简单版本如下所示:
#include <iostream>
#include <string>
using namespace std;
class Base{
public:
void getNext(){
cout<<"Base Func"<<endl;
}
};
class Derived: public Base{
public:
void getNext(){
cout<<"Derived func"<<endl;
}
};
int main(){
Base *ptr = new Derived();
ptr->getNext();
}
上面的代码将调用基类的“getNext”函数,但我希望它以某种方式调用派生类的。真正的问题是我创建了一个新类,其唯一的公共方法执行一些逻辑并且还需要来自数据库的序列。从数据库中获取序列的类(称为 DlSequence)是我们应用程序(您可以调用的核心或产品)的基本代码,我无法更改它。现在我需要使用 cppunit 测试我的课程。所以,我必须模拟或伪造 DlSequence 类并覆盖 getNext 函数,但这个函数不是虚拟的。可以模拟它吗?或者我可以用任何解决方法绕过这个问题。 我没有使用任何模拟框架,但我的盒子里安装了 mockpp,我无法安装任何其他模拟框架。提前致谢。
【问题讨论】:
-
注意:这里不需要
new,多态不需要动态分配。 -
为什么不对新的 Derived 实例使用 Derived* 而不是 Base*,否则我错过了什么?
-
@Merlin069:可能是因为要测试的东西需要
Base*或Base&,因为Derived仅用于模拟目的。 -
你能让你的课程
template在实际代码中使用Base,在你的测试中使用MockedBase吗? -
@MatthieuM.,嗯,有道理。谢谢;O)
标签: c++ tdd overriding virtual cppunit