带有回调的 C++ 假类

标签 c++ unit-testing callback tdd

如果我需要测试一个与类 B 接口(interface)的 C++ 类 A,在调用 B 之后会启动对 A 的回调,那么什么是好的设计模式?
我需要完全控制这些回调 - 当它们发生时执行以及使用什么信息。

我正在使用 Google TestGoogle Mock作为我的测试框架。在 Google Mock 的介绍中,他们解释了 difference between a fake and a mock .看来我需要一个假的 B 类而不是模拟。
在他们的文档中,他们详细说明了如何拥有 non-trivial implementations of B's functions。 , 但这并没有解决我控制从 B 到 A 的回调的要求。

更新:

  • 澄清一下:A 有回调。在 A 调用 B 的函数后的某个时间,B 在 A 中启动回调函数。虽然精确到什么程度并不重要,但在我的例子中,B 持有指向 A 的指针并调用预定义的接口(interface)函数(派生自纯虚类 A_abstract)。

最佳答案

class A 不必担心回调调用是由 B 还是由一些完全不同的代码进行的,只要回调中提供的所有信息都是正确的.

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


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

关于带有回调的 C++ 假类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4602897/

相关文章:

javascript - karma 单元测试 : Module name "react" has not been loaded yet for context: _. 使用 require([])

javascript - 调用数量可变且相互依赖的异步函数

c++ - 我应该使用哪种 DLL(或 .lib 或类)

c++ - 结构作为函数的参数 : more efficient to copy or dereference?

c++ - 我可以将列表放入结构中吗?

c++ - 循环携带 `->` 的依赖性阻止并行化

unit-testing - Unitils 与 Spring TestContext 框架

c++ - 使用 C++ 生成真正的随机数 (Windows 10 x64)

python - 无法模拟方法

scala - 生成器/ block 到迭代器/流的转换