Ras*_*yak 33 c++ googletest googlemock
我想了解的目的google-mock,谷歌的C++嘲讽框架.
我gtest早些时候已经合作过,但我仍然无法理解它是什么gmock.我们为什么需要它?
gtest用于单元测试.我们需要什么样gmock的话,如果gmock需要unit testing?
dan*_*itz 40
"谷歌模拟本身不是一个测试框架.相反,它需要一个测试框架来编写测试.谷歌模拟与谷歌测试无缝协作.它附带了一个捆绑的谷歌测试.从1.1.0版开始,你也可以使用它适用于您选择的任何C++测试框架." - Google Mock,系统要求
模拟就像对象一样,通过提供受控行为来模仿真实交易.例如,要测试股票定价应用程序,您需要创建一个假的股票数据提供商,创建假股票报价以测试您的代码.想想mock这个词,字面意思是'模仿'.
Thi*_*eye 29
软件单元不住在绿色草地上.他们经常需要一些同行来完成这项工作.在实际系统中,这些对应物属于系统本身.在单元测试中,它们被模拟所取代.
Gtest是单元测试的框架.Gmock是一个在单元测试期间模仿系统其余部分的框架.
小智 13
假设您正在编写一段代码,需要与不可预测的,昂贵的外部系统(例如,Web站点,大型数据库,物理传感器等)进行交互.当外部系统超时时,您的代码需要继续工作,或给你错误信息,或给你不一致的数据.如何测试您的代码是否真正符合这些要求?
好吧,你可以在一个实际的网站/数据库/传感器/任何东西上运行它,很多次,并希望你运气到你的代码应该处理的所有错误条件.显然是一种相当昂贵且不可靠的测试策略.
所以相反,你编写的东西满足与网站/数据库/传感器/任何相同的界面,但你编程的东西产生某些"罐装"响应(错误,超时,不一致的数据等).你的测试现在将运行速度更快(因为它们不会面临真实网站/数据库/传感器/其他的开销),并且它们是可预测的.不幸的是,编写一个单独的"模拟"网站/数据库/传感器/需要测试的每个场景需要大量编码.工作越多,就越不可能做到这一点.结果:代码测试不充分.
Gmock及其亲属自动化了很多这样的东西,所以你可以在测试中间指定所需的"罐头"行为,代价只有几行代码.如果测试很容易编写,你可能会编写更多的测试,因此在发布代码之前更有可能发现错误:-)
顺便说一句,这意味着您还需要"依赖注入":您的代码需要接受接口类型的参数,并且您需要能够传入模拟对象(用于单元测试)或"真实"网站/数据库/传感器/任何(用于实际使用).