如何在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();
但仍然...
答
这是我第一次听说一个模拟框架不需要一个接口来创建模拟对象。其他人都这样做。必须是文档中的错误。
啊,你的解释清除了我脑海中的一些东西。谢谢。 – 2010-10-21 19:41:12