2011-12-03 74 views
4

我们遇到了以下问题:一些我们无法触及但需要单元测试的类不幸的是,这些类没有设计考虑单元测试,所以我们在创建模拟对象来测试代码时遇到了问题。模拟对象的困境

实施例:

class SomeOtherClass 
{ 
public: 
void foo2() { … } 
}; 

class ClassToTest 
{ 
public: 
ClassToTest() {…} 
void foo1() { SomeOtherClass A.foo2(); } 
}; 

在上面的例子中,我们想测试foo1()但它需要foo2()所以我们想使foo2()属于模拟对象(在现实生活中这些功能/类得多复杂并涉及与硬件配置的交互等,因此需要模拟对象/功能)。

到现在为止,我们已经做了这样的事情,但它并不是最优的,因为代码似乎对其他单元测试有副作用。

class MockSomeOtherClass 
{ 
public: 
    foo2() { … } // mock function 
}; 

#define SomeOtherClass MockSomeOtherClass 

#include “ClassToTest.cpp” 
... 

有没有更好的办法做到这一点不改变原来的类(或最小的变化)?我们使用CPPUnit进行测试。

编辑:添加标签winapi更清楚地描述环境。

回答

2

有一种叫做Typemock Isolator++的产品,可以解决您提出的问题。我还没有尝试过,所以无法评论它的工作原理或使用方法。

不幸的是,你必须给他们你的电子邮件地址来尝试它。下载过程非常简单,但是您可以重定向到this page,它会引导您“现在注册您的软件以获得免费试用版!请输入您的详细信息,包括有效的电子邮件以便接收启动密钥以开始使用Isolator ++。

+1

谢谢,我会看看! –