模拟 - 方法&工具

时间:2017-08-03 06:35:53

标签: c++ unit-testing gmock

我自学了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%代码?

1 个答案:

答案 0 :(得分:2)

此处不需要规则。你只需要模拟需要嘲笑的东西。没什么,没什么。

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

现在让我们假设你的代码使用了一些依赖关系B.

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

从这个意义上讲,经验法则是:如果必须,可以嘲笑事物。

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

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