2017-08-03 100 views
1

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

回答

2

这里没有必要规则。你只是嘲笑那些需要被嘲笑的东西。没有更多,没有更多。

请记住:你写的单元测试的想法是测试你的单元隔离。这意味着你有时必须“切断”你的单元对其他代码的依赖关系。

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

  • 时,你可以调用你的代码保持真正的B的地方 - 罚款。那就这样做。
  • 当B在你的单元测试设置中失败时,你需要控制什么B 返回到你的代码 - 那么你需要一个模拟。

从这个意义上说,经验法则是:嘲笑事情,如果你必须。

因此,我们不能告诉你究竟是什么模拟。相反,你必须退一步:

  • 首先,了解如何你想单元测试代码
  • 然后你看它的依赖
  • 那么你也许尝试,当你发生了什么调用代码没有任何嘲笑到位
  • 那么你从前面的步骤收集的数据得出你的结论