不是虚拟的模拟方法
Mock Methods that are not virtual
我有一个 class 说 A 如下所述:
class A
{
void show()
{}
int data(int x)
{}
.....
};
我需要模拟 class - 因为成员函数不是虚拟的 - 我可以像下面提到的那样设计我的模拟 class 吗:
class MockA : public A
{
MOCK_METHIOD0(show, void ());
MOCK_METHIOD1(data, int (int));
}
我可以用这种方式实现吗?MockA 是否有机会错过对
class A 的任何功能?
使用 MockA 创建的对象无论如何都会调用 class 一个实际的方法实现?
通常对于这种情况,您没有从 A
继承的模拟,而是使用编译时机制来 select 是使用实现 class 还是模拟 class。例如。对使用 A
的所有内容进行模板化,然后使用 A
或 MockA
实例化模板,以在测试设置中将生产 class 替换为模拟模板。任何未在模拟中实现但被调用的方法都会导致编译时错误。即使方法是非虚拟的,模拟定义中宏的使用也几乎相同。
困难的部分是到处替换 class。模板,通过宏引用 class 名称,或使用相同的 class 名称并确保只链接一个都是可能的。
我有一个 class 说 A 如下所述:
class A
{
void show()
{}
int data(int x)
{}
.....
};
我需要模拟 class - 因为成员函数不是虚拟的 - 我可以像下面提到的那样设计我的模拟 class 吗:
class MockA : public A
{
MOCK_METHIOD0(show, void ());
MOCK_METHIOD1(data, int (int));
}
我可以用这种方式实现吗?MockA 是否有机会错过对 class A 的任何功能? 使用 MockA 创建的对象无论如何都会调用 class 一个实际的方法实现?
通常对于这种情况,您没有从 A
继承的模拟,而是使用编译时机制来 select 是使用实现 class 还是模拟 class。例如。对使用 A
的所有内容进行模板化,然后使用 A
或 MockA
实例化模板,以在测试设置中将生产 class 替换为模拟模板。任何未在模拟中实现但被调用的方法都会导致编译时错误。即使方法是非虚拟的,模拟定义中宏的使用也几乎相同。
困难的部分是到处替换 class。模板,通过宏引用 class 名称,或使用相同的 class 名称并确保只链接一个都是可能的。