模拟 - 方法和工具

Mocking - Methods & Tools

本文关键字:工具 方法 模拟      更新时间:2023-10-16

我自学了gmock并理解了它的功能。如果我们可以模拟一些方法并测试我们的流程,那就太好了。

我现在的问题是我们有巨大的代码存储库,它为特定流调用许多子模块接口 - 即底层类方法调用许多子模块/子模块接口:

bool classA::methodA(uint64_t number) {
if (0 == number) {
return false;
}
Foo* p=&obj;
while (true && (p->*fptr)(number)) {
if (1 == number) {
return true;
} else if (0 == number%2) {
number = number / 2;
} else {
Printer* machine;
char* buff;
PTR pmf[2]= {&B::Copy, &B::Append}; 
(machine->*pmf[APPEND])(buff, number);
number = 3 * number + 1;
}
}
}

是否有一种方法/机制/经验法则,通过它我们可以识别/了解需要模拟以测试我的类 100% 代码的所有子模块方法?

这里不需要规则。你只是嘲笑需要被嘲笑的东西。仅此而已,仅此而已。

请记住:您编写单元测试的想法是单独测试您的单元。这意味着您有时必须将单元的依赖项"剪切"到其他代码中。

现在让我们假设您的代码正在使用某个依赖项 B。

  • 当您可以调用代码时,将真正的 B 保留在原位 - 很好。然后这样做。
  • 当 B 在单元测试设置中失败,或者您需要控制 B返回给代码的内容时 - 那么您需要一个模拟。

从这个意义上说,经验法则是:如果有必要,可以模拟事物。

因此,我们无法告诉您究竟要嘲笑什么。相反,您必须退后一步并:

  • 首先,了解您希望如何对代码进行单元测试
  • 然后你看看它的依赖关系
  • 然后,您可以尝试在没有任何模拟的情况下调用代码时会发生什么
  • 然后,您从前面步骤收集的数据中得出结论