我刚刚使用模拟对象进入测试驱动开发。我可以用UnitTest ++做很多事情,但现在我想尝试最小化打字,并且我正在尝试使用AMOP模拟框架来进行模拟。
AMOP州:
AMOP与其他模拟对象库之间的主要区别在于: 用户不需要实现 对象的接口 模拟...
然而,我无法弄清楚这一点。基本用法页面仍显示IInterface类。任何人都可以在不使用接口类的情况下完成它吗?
答案 0 :(得分:2)
对于我在文档中看到的内容,它实际上不需要mock对象来实现任何接口。模拟对象是基于原始对象的接口构造的,但不是通过继承构造的,而是作为类的参数构建的:
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();
但仍然......
答案 1 :(得分:0)
这是我第一次听说模拟框架不需要用于创建模拟对象的接口。其他人都这样做。必须是文档中的错误。