C++ gtest和gmock之间有什么区别?

C++ gtest和gmock之间有什么区别?,c++,googletest,googlemock,C++,Googletest,Googlemock,我试图理解googlemock的目的 我之前已经使用过gtest,但仍然不明白gmock是什么。我们为什么需要它 gtest用于单元测试。如果单元测试需要gmock,那么我们需要gmock做什么呢?“GoogleMock本身并不是一个测试框架。相反,它需要一个用于编写测试的测试框架。GoogleMock与GoogleTest无缝配合。它附带了一份捆绑的谷歌测试。从版本1.1.0开始,您也可以使用您选择的任何C++测试框架。“-谷歌模拟,系统要求 Mock类似于对象,其定义方式是通过提供受控行为来

我试图理解
googlemock
的目的

我之前已经使用过
gtest
,但仍然不明白
gmock
是什么。我们为什么需要它

gtest
用于单元测试。如果
单元测试需要
gmock
,那么我们需要
gmock
做什么呢?

“GoogleMock本身并不是一个测试框架。相反,它需要一个用于编写测试的测试框架。GoogleMock与GoogleTest无缝配合。它附带了一份捆绑的谷歌测试。从版本1.1.0开始,您也可以使用您选择的任何C++测试框架。“-谷歌模拟,系统要求


Mock类似于对象,其定义方式是通过提供受控行为来模拟真实交易。例如,要测试股票勾号应用程序,您需要创建一个假股票数据提供程序,该程序创建假股票报价来测试代码。想想Mock这个词,字面意思是“模仿”。

软件单元不住在green meadows、 他们经常需要一些对应的人来做这项工作。在实际系统中,这些对应的人属于系统本身。在单元测试中,他们被替换为mock

Gtest是单元测试的框架。
Gmock是一个框架,在单元测试期间模拟系统的其余部分。

假设您正在编写一段代码,需要与不可预测、昂贵的外部系统(例如网站、大型数据库、物理传感器等)交互当外部系统超时,或给您错误消息,或给您不一致的数据时,您的代码需要继续工作。如何测试您的代码是否真正满足这些要求

好吧,你可以在一个实际的网站/数据库/传感器/任何东西上运行它,运行一整段时间,并希望你幸运地遇到你的代码应该处理的所有错误情况。显然,这是一个相当昂贵和不可靠的测试策略

因此,相反,您编写的东西满足与网站/数据库/传感器/任何东西相同的界面,但您已经对其进行了编程,以生成某些“固定”响应(错误、超时、不一致的数据等)。您的测试现在运行得快得多(因为它们不会面临真实网站/数据库/传感器/任何东西的开销),而且它们是可预测的。不幸的是,为每个需要测试的场景编写单独的“模拟”网站/数据库/传感器/任何东西都需要大量的编码。工作量越大,完成的可能性就越小。结果:测试的代码不充分

GMOCK及其亲属自动化了很多这样的东西,所以你可以在测试本身的中间指定所需的“罐头”行为,只需几行代码。如果测试很容易写,你可能会写更多的代码,因此在发送代码之前更容易发现bug:-)


顺便说一句,这意味着您还需要“依赖项注入”:您的代码需要接受接口类型的参数,并且您需要能够传入模拟对象(用于单元测试)或“真实”网站/数据库/传感器/任何东西(用于实际使用)。

假设您想要将某些内容写入文件

您必须测试系统内存是否已满

你会让系统内存满来测试这个吗?不会


您的朋友Google mock将在这里帮助您。

清晰、简单且简短的解释!“……没有单元测试框架,模拟框架就什么都不是……”来自: