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

时间:2010-10-21 19:21:35

标签: c++ tdd mocking

我刚刚使用模拟对象进入测试驱动开发。我可以用UnitTest ++做很多事情,但现在我想尝试最小化打字,并且我正在尝试使用AMOP模拟框架来进行模拟。

AMOP州:

  

AMOP与其他模拟对象库之间的主要区别在于:   用户不需要实现   对象的接口   模拟...

然而,我无法弄清楚这一点。基本用法页面仍显示IInterface类。任何人都可以在不使用接口类的情况下完成它吗?

2 个答案:

答案 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)

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