c++ - 模拟 - 方法和工具

标签 c++ unit-testing googlemock

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

我现在的问题是我们有庞大的代码库,它为特定流程调用许多子模块接口(interface)——即底层类方法调用许多子模块/子子模块接口(interface):

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

最佳答案

这里不需要规则。您只需 mock 需要 mock 的事物。仅此而已。

请记住:您编写单元测试的目的是在隔离 中测试您的 单元。这意味着您有时必须“切断”您的单元对其他代码的依赖性。

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

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

从这个意义上说,经验法则是:如果必须的话,请模拟一些事情。

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

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

关于c++ - 模拟 - 方法和工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45476603/

相关文章:

python - 使用 matplotlib 测试事件处理和选择

java - 如何在 JUnit 4 中创建一种抽象的 super 测试类?

c++ - google mock - 如何模拟被测类拥有的对象

c++ - 如何用qt5播放视频

c++ - 从 QThread 使用 QCamera/QCameraInfo

c++ - 函数的完整列表,来自 c++ 的 MS Word 命令

Python模拟paramiko sftpclient打开

c++ - C2995 : template already defined

c++ - 如何将 Given/When/Then 模式与模拟(Google Mock)一起使用?

c++ - 无趣的模拟函数调用 bla() && 预期 : to be called at least once bla()?