如何在AMOP中创建一个没有接口类的模拟对象?

问题描述:

我刚开始使用模拟对象进行测试驱动开发。我可以用UnitTest ++做很长的一段时间,但现在我想尽量减少打字,并且我正在尝试使用AMOP模拟框架来进行模拟。如何在AMOP中创建一个没有接口类的模拟对象?

AMOP状态:

AMOP等mock对象库之间的主要区别在于, 用户不需要实现对象的 接口,以 模拟...

但是,我无法弄清楚这一点。基本使用页面仍然显示一个IInterface类。任何人都可以做到而不使用接口类?

对于我在文档中看到的,它实际上并不需要模拟对象来实现任何接口。该嘲讽对象基于原始对象的接口上构建的,而不是通过继承,而是作为类的参数:

TMockObject<IInterface> mock; 

这里没有继承,TMockObject没有得到通过继承依赖于任何接口。然后,在添加模拟方法通过模拟对象来实现:

mock.Method(&IInterface::SimpleFunction); 
mock.Method(&IInterface::SimpleFunctionWithAlotParams); 

((IInterface*)mock)->SimpleFunction(); 
((IInterface*)mock)->SimpleFunctionWithAlotParams(0, 0, 0, 0, std::string()); 

同样,对象mock实际上不继承的接口。它可能会将转换运算符重新定义为IInterface*(它将返回一个内部IInterface对象)。

在继承接口方面我看不到很多优点,但无论如何。我宁愿一些模板为TMockObject成员函数给予更多的意义是丑陋投(未测试,只是一个想法):

template <typename I> 
I* as(void) 
{ 
    return m.internal_interface_pointer_; 
} 

,所以你可以写这样的:

mock.as<IInterface>()->SimpleFunction(); 

但仍然...

+0

啊,你的解释清除了我脑海中的一些东西。谢谢。 – 2010-10-21 19:41:12

这是我第一次听说一个模拟框架不需要一个接口来创建模拟对象。其他人都这样做。必须是文档中的错误。