【问题标题】:Mocking - Methods & Tools模拟 - 方法和工具
【发布时间】:2017-08-03 06:35:53
【问题描述】:

我自学了 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% 代码的子模块的所有方法?

【问题讨论】:

    标签: c++ unit-testing gmock


    【解决方案1】:

    这里不需要规则。您只需嘲笑需要嘲笑的东西。不多也不少。

    请记住:您编写单元测试的想法是在隔离中测试您的单元。这意味着您有时必须将您的单元在其他代码中的依赖关系“删除”。

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

    • 当你可以调用你的代码来保持真正的 B 就位时 - 很好。然后这样做。
    • 当 B 在您的单元测试设置中失败时您需要控制 B 返回到您的代码的内容 - 然后您需要一个模拟。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2020-04-12
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多