我在试着理解google-mock的目的,Google's C++ mocking framework。
我之前已经用过gtest了,但是我还是不明白gmock是什么。我们为什么需要它?
gtest用于单元测试。如果unit testing需要gmock,那么我们需要gmock做什么呢
发布于 2012-12-04 14:21:54
“谷歌模拟本身不是一个测试框架。相反,它需要一个测试框架来编写测试。谷歌模拟与谷歌测试无缝合作。它附带了一份谷歌测试捆绑的副本。从1.1.0版本开始,你也可以将它用于任何你选择的C++测试框架。”--谷歌模拟,系统要求
Mock类似于对象,定义为通过提供受控行为来模仿真实交易。例如,要测试股票行情应用程序,您需要创建一个假股票数据提供程序,该提供程序创建用于测试代码的假股票报价。想想mock这个词,字面意思是“模仿”。
发布于 2013-04-19 18:15:47
软件单元并不生活在绿色的草地上。他们经常需要一些同行来做这项工作。在实际系统中,这些对等项属于系统本身。在单元测试中,它们被mock替换。
Gtest是一个单元测试框架。Gmock是一个在单元测试期间模仿系统其余部分的框架。
发布于 2015-04-14 03:54:24
假设您正在编写一段需要与不可预测的、昂贵的外部系统(例如,Web站点、大型数据库、物理传感器等)交互的代码。当外部系统超时,或者给出错误消息,或者给出不一致的数据时,您的代码需要继续工作。如何测试您的代码是否真正满足这些要求?
那么,您可以针对实际的Web站点/数据库/传感器/任何东西运行它一大堆次数,并希望您幸运地遇到您的代码应该处理的所有错误条件。显然,这是一种相当昂贵且不可靠的测试策略。
因此,您只需编写一些满足与Web站点/数据库/传感器/其他内容相同的接口的内容,但是您已经编写了一些内容来生成特定的“罐头”响应(错误、超时、不一致的数据等)。您的测试现在将运行得更快(因为它们不需要面对真正的Web站点/数据库/传感器/任何东西的开销),并且它们是可预测的。不幸的是,为您需要测试的每个场景编写单独的“模拟”Web站点/数据库/传感器/任何内容都需要大量代码。工作量越大,你就越不可能去做。结果:未充分测试代码。
Gmock及其相关工具自动化了大量此类内容,因此您可以在测试过程中指定所需的“罐头”行为,而只需几行代码。如果测试很容易编写,那么您可能会编写更多测试,因此更有可能在发布代码之前发现错误:-)
顺便说一句,这意味着您还需要“依赖注入”:您的代码需要接受接口类型的参数,并且您需要能够传入模拟对象(用于单元测试)或“真正的”Web站点/数据库/传感器/任何东西(用于实际使用)。
https://stackoverflow.com/questions/13696376
复制相似问题