草庐IT

c++ - gmock中saveArg和saveArgPointee有什么区别?

我正在gmock学习。现在我试图模拟名为“任务”的类,如下所示:classMockTask:publicTask{public:MOCK_METHOD3(Execute,bool(std::set&setDeviceIDs,inttimeout,PACKET_DATA*Data));};而且我想在调用task.excute时保存结构pdata,以便我可以验证pdata->成员。这是我的代码:PAKET_DATAdata;EXPECT_CALL(task,Execute(testing::_,testing::_,testing::_)).WillOnce(testing::saveAr

c++ - 使用 GTest 和 GMock : shared vs. 静态库进行测试

我认为这个问题可能违反了网站的一些问答标准,因为我可能收到的答案可能被视为意见驱动。尽管如此,它还是...假设我们正在处理一个C++项目,使用CMake来驱动构建/测试/打包过程,并使用GTest和GMock进行测试。进一步假设我们项目的结构如下所示:cool_project||--source||||--module_foo||||||--(bunchofsourcefiles)||||--module_bar||||--(yetmoresourcefiles)||--tests||--module_foo||||--(testsformodule_foo)||--module_ba

c++ - mock_method 上的 gmock 编译错误(在 testing::internal::FunctionMocker 中)

当我尝试模拟一个函数时,我遇到了一些奇怪的编译错误。编译器提示复制构造函数有问题。代码片段:classdb_key{public:db_key(void){}explicitdb_key(constchar*buf){}~db_key(void){}};classbar_A{public:explicitbar_A(constdb_key&key):m_key(key){}virtual~bar_A(void){}constdb_key&dbkey(void)const{returnm_key;}private:constdb_keym_key;};classbar_B:bar_A{p

c++ - 如何使用 gmock 测试一个类调用它的基类方法

classFoo{public:intx;inty;voidmove(void);};classSuperFoo:publicFoo{public:intage;voidupdate();};SuperFoo::update(void){move();age++;}我刚开始使用C++和单元测试,我有一些类似于上面的代码,我想使用gmock来测试SuperFoo::update()调用基类'移动()方法。解决这种情况的最佳方法是什么? 最佳答案 一种方法是使move方法成为虚拟方法,并创建类的模拟:#include"gtest/gte

c++ - GMock : How to return mock class variable as the return value

我是第一次尝试使用GMock(用于C++的谷歌模拟框架)。我有以下类(class):classLocalCache{public:virtualtime_tGetCurrentTime()=0;virtualintAddEntry(conststd::stringkey,std::string&value);virtualintGetEntry(conststd::stringkey,std::string&value);};GetEntry方法调用GetCurrentTime调用。我想模拟GetCurrentTime方法,以便我可以在测试中提前时钟以测试作为GetEntry调用的一部

c++ - 带有 gmock 的 11 个参数的 mock 方法

我正在使用gmock模拟遗留代码中的依赖项。其中一个类有一个带有11个参数的方法。当我尝试使用MOCK_METHOD11_WITH_CALLTYPE来模拟它时,我发现这个宏不存在。gmock最多只支持10个参数。你对此有何建议?我是否用假体实现这个方法?还是复制并扩展宏?谢谢!PS,我现在不需要在我的测试中模拟这个方法,但将来可能需要这样做。最好的问候, 最佳答案 具有超过10个参数的方法可能是一个麻烦的迹象。我可以建议一个解决方法,这将有助于您的具体情况,但除了模拟之外,这也可能是一个好主意。将几个有意义的参数作为一个组,并将它们

c++ - gmock TypedEq 相同的字符串不同的地址

我正在尝试对gmock对象设置期望值。只要将“avout”作为参数传递给我的方法,就应该应用期望。我这样设置期望:EXPECT_CALL(actx_mock,getDeviceClientService(TypedEq("avout"),_,_)).WillOnce(DoAll(SetArgPointee(&mockAVOut),Return(0)));需要TypedEq,因为该方法已重载,接受字符串或constchar*。当我运行测试时,出现以下错误:CAniSpiceServices_test.cpp:1357:EXPECT_CALL(actx_mock,getDeviceClie

c++ - gmock 支持右值引用的解决方法

gmock不支持将右值引用作为模拟函数的参数(issuereport)。例如下面的代码将不会编译:MOCK_METHOD1(foo,void(std::string&&));我找不到有关gmock何时为此添加支持的信息。 最佳答案 我想出了一个解决方法:使用非模拟函数foo(std::string&&s){foo_rvr(s)}将函数中继到模拟函数foo_rvr(std::字符串)。这是完整的程序。#include#include#includeclassRvalueRef{public:virtualvoidfoo(constst

c++ - 如何设置 GMock EXPECT_CALL 为模拟函数调用两个不同的函数

如何在“测试套件”中的测试函数中调用模拟函数时调用两个不同的函数?详细信息:模拟函数在测试函数中被调用两次。第一次调用时,它应该调用一个函数(测试套件中的本地函数),第二次调用时,它应该调用另一个函数(测试套件中的另一个本地函数)。那么,如何为上述需求设置EXPECT_Call为“Invoke”呢? 最佳答案 你应该使用WillOnce。像这样的(未经测试):structA{MOCK_METHOD0(foo,void());};classA_Test:public::testing::Test{Aa;voidbar1(){}void

c++ - GMock - 使用 ON_CALL 为重载方法返回默认值

我正在尝试为包含三个重载方法的类编写模拟,即:#include#includeusing::testing::_;using::testing::Return;using::testing::A;using::testing::ByRef;using::testing::Ref;using::testing::TypedEq;structFoo{intfooMethod(constint&intParam){return0;}intfooMethod(constfloat&floatParam){return0;}intfooMethod(conststd::string&string