首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带回调的C++伪类

问带回调的C++伪类
EN

Stack Overflow用户
提问于 2011-01-05 10:14:38
回答 3查看 2.3K关注 1票数 1

如果我需要测试一个与B类接口的C++类A,然后调用B,启动对A的回调,那么什么是一个好的设计模式?

我需要对这些回调进行完全控制--在执行这些回调时,使用什么信息。

我使用谷歌测试和Google作为我的测试框架。在Google的介绍中,他们解释了假与假的区别。看来我需要的是假的B级课程而不是模拟。

在他们的文档中,他们详细介绍了如何拥有B函数的非平凡实现,但这并不能解决我控制从B到A的回调的要求。

更新:

  • 只是澄清一下:A有回调。在A调用B的函数之后的一段时间,B在A中启动回调函数,尽管这并不重要,但在我的示例中,B持有指向A的指针,并调用预定义的接口函数(派生自纯虚拟类A_abstract)。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-05 18:53:51

只要回调中提供的所有信息都是正确的,class A就不应该担心回调是由B或某些完全不同的代码进行的。

这意味着,如果您的测试案例能够获得回调所需的所有信息,那么您可以在适当的时候从测试脚本中调用回调,并为class B使用一个模拟。

如果class A实际检查回调是否由class B执行(到目前为止实际上可以实现),那么类A和B耦合得太紧,无法单独测试它们。那么,您应该重新考虑它们是否真的应该是两个紧密耦合的类。

票数 2
EN

Stack Overflow用户

发布于 2011-01-05 15:19:13

我不知道我是否理解你的问题,但似乎你想要的是战略模式。只要B中有一个A_abstract指针作为成员变量,就可以实现从B到A的回调。

代码语言:javascript
复制
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(); }
};
票数 0
EN

Stack Overflow用户

发布于 2011-01-05 18:56:55

你考虑过使用Qt(或其他人的)信号和插槽吗?与回调相比,我更喜欢关于信号和插槽的推理,尽管(我认为)它们在功能上基本上是等价的。

-布莱恩-

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4602897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档