如果我需要测试一个与B类接口的C ++类A,那么什么是一个好的设计模式?对B的调用稍后会启动对A的回调?我需要完全控制这些回调 - 当它们是执行了什么信息。
我正在使用Google Test和Google Mock作为我的测试框架。在Google Mock的介绍中,他们解释了difference between a fake and a mock。我似乎需要一个假的B类,而不是模拟。
在他们的文档中,他们详细说明如何拥有non-trivial implementations of B's functions,但这并不能解决我从B到A控制回调的要求。
更新
答案 0 :(得分:2)
class A
或一些完全不同的代码进行的,只要回调中提供的所有信息都是正确的, B
就不应该担心。
这意味着,如果您的测试用例可以获得回调所需的所有信息,那么您可以在适当的时间从测试脚本中调用回调,并使用模拟class B
。
如果class A
实际检查回调是由class B
执行的(到目前为止实际可以实现),则类A
和B
耦合得太紧单独测试它们。那么你应该重新思考它们是否真的应该是两个紧密耦合的类。
答案 1 :(得分:0)
我不知道我是否理解你的问题,但似乎你想要的是the strategy pattern。只要你有一个A_abstract指针作为B中的成员变量,就可以实现从B到A的回调。
class A_abstract {
public:
virtual void work() = 0;
};
class B {
private:
A_abstract* _m_A_ptr;
public:
set_a_ptr(A_abstract* _APtr) { _m_A_ptr = _APtr; }
void work() { _m_A_ptr->work(); }
};
答案 2 :(得分:0)
您是否考虑过使用Qt(或其他人的)信号和插槽?我更喜欢关于信号和插槽的推理而不是回调,尽管(我认为)它们在功能上基本相同。
-Brian -