C++ 当函数互相调用时,如何在同一个类中锁定函数
假设情况如下:C++ 当函数互相调用时,如何在同一个类中锁定函数,c++,gmock,C++,Gmock,假设情况如下: class base() { virtual func1()=0; virtual func2()=0; virtual func3()=0; } class Inheritance:public base { virtual func1(){ func2(); func3() }; virtual func2(){ /* do something */ }; virtual func3(){ /* do something */ }; }
class base()
{
virtual func1()=0;
virtual func2()=0;
virtual func3()=0;
}
class Inheritance:public base
{
virtual func1(){ func2(); func3() };
virtual func2(){ /* do something */ };
virtual func3(){ /* do something */ };
}
现在我想单元测试func1(),模拟func2()和func3()
那么,当func1()知道调用mock-func2()和mock-func3()而不调用真正的func2()和func3()时,是否可以模拟func2()和func3()
顺便说一下,我使用类工厂来初始化类,所以实际情况可能要复杂一些
谢谢~你所描述的肯定是可以做到的,但这并不漂亮。一种方法是让mock从具体类而不是接口派生,并创建mock的子类,该子类将根据某些配置成员向适当的超类分派方法调用。例如:
// class MockBase inherits from BaseImpl, which in turn inherits from
// the 'base' interface
class Dispatch : public MockBase {
public:
void func1() {
return useMockFunc1 ? MockBase::func1() : BaseImpl::func1();
}
bool useMockFunc1;
};
然而,这还需要另一个类,要求您的mock继承自具体实现而不是接口,这将使大多数程序员想用勺子挖他们的眼睛。与其使用这种讨厌的东西,不如回顾一下您正在测试的类的设计,特别是寻找将其分解为单独对象的方法,每个对象都可以单独模拟。完全可以按照您所描述的做,但这并不漂亮。一种方法是让mock从具体类而不是接口派生,并创建mock的子类,该子类将根据某些配置成员向适当的超类分派方法调用。例如:
// class MockBase inherits from BaseImpl, which in turn inherits from
// the 'base' interface
class Dispatch : public MockBase {
public:
void func1() {
return useMockFunc1 ? MockBase::func1() : BaseImpl::func1();
}
bool useMockFunc1;
};
然而,这还需要另一个类,要求您的mock继承自具体实现而不是接口,这将使大多数程序员想用勺子挖他们的眼睛。与其使用这种讨厌的东西,不如回顾一下您正在测试的类的设计,特别是寻找将其分解为单独对象的方法,每个对象都可以单独模拟