如果我需要测试一个与类 B 接口(interface)的 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 的回调的要求。
更新:
- 澄清一下:A 有回调。在 A 调用 B 的函数后的某个时间,B 在 A 中启动回调函数。虽然精确到什么程度并不重要,但在我的例子中,B 持有指向 A 的指针并调用预定义的接口(interface)函数(派生自纯虚类 A_abstract)。
最佳答案
class A
不必担心回调调用是由 B
还是由一些完全不同的代码进行的,只要回调中提供的所有信息都是正确的.
这意味着,如果您的测试用例可以获得回调所需的所有信息,那么您可以在适当的时间从测试脚本中调用回调,并为 class B
使用 mock。
如果 class A
实际检查回调是由 class B
执行的(到目前为止实际上可以实现),那么 classes A
和 B
耦合得太紧密,无法单独测试它们。然后你应该重新考虑它们是否真的应该是两个紧密耦合的类。
关于带有回调的 C++ 假类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4602897/