草庐IT

c++ - 使用 googlemock 时,我可以不模拟 C++ 接口(interface)中的所有方法吗?

我正在使用GoogleMock1.6RC并尝试模拟COM接口(interface)。COM接口(interface)中有近50个方法,其中一些是从基接口(interface)继承的。当我创建一个继承自此接口(interface)的模拟struct并仅模拟我正在使用的方法时,我得到了cannotinstantiateabstractclass错误。我想知道是否可以在googlemock中执行此操作。 最佳答案 这是不可能的。您必须重载所有接口(interface)中的所有纯虚方法(构造函数和析构函数除外)。

c++ - 如何在 C++ 中 stub /模拟非指针成员变量?

很多单元测试的网站都说要提取一个接口(interface)和接口(interface)的代码(这是有道理的),但这需要通过指针使用多态性。是否可以在没有指针的情况下完成此操作,这样我就不必修改生产代码?我宁愿不使用指针和管理内存。允许条件编译。我专门为我的stub/模拟使用gmock。我研究过的一些事情是:使用引用涉及编写特殊的复制构造函数或使其不可复制仍然需要使用new/delete来管理内存不确定这是否会导致不可预见的问题通过代码生成创建指针包装类的集合。界面保持不变,但增加了一些测试方法。看起来可以,但需要维护下面是我的意思的例子请注意gmock模拟对象不可复制,因此我不能构造函

c++ - 如何在 googlemock 中创建部分(混合)模拟?

Google建议delegatingcallstoaparentobject当您需要调用真实对象的功能时,但这并不会真正创建部分(混合)模拟。调用真实对象时,任何方法调用都是真实对象的方法调用,而不是模拟对象,您可能已经在模拟对象上设置了操作/期望。如何创建部分模拟,仅将特定方法委托(delegate)给真实对象,并将所有其他方法调用委托(delegate)给模拟对象?委托(delegate)给真实对象的例子using::testing::_;using::testing::AtLeast;using::testing::Invoke;classMockFoo:publicFoo{pu

c++ - 谷歌模拟 : Is it ok to use global mock objects?

在所有关于gmock的文档中,我总是发现要在测试中实例化模拟对象,就像这样:TEST(Bim,Bam){MyMockClassmyMockObj;EXPECT_CALL(MyMockObj,foo(_));...}因此,对象在每次测试时都会被创建和销毁。我相信为每个测试夹具创建和销毁对象也完全没问题。但我想知道是否也可以拥有模拟对象的文件全局实例,就像这样:MyMockClassmyMockObj;TEST(Bim,Bam){EXPECT_CALL(MyMockObj,foo(_))...}我试过了,到目前为止我完全没有问题,一切似乎都很好。但也许我应该知道什么?只是因为我偶然发现了t

c# - 通过 USB 连接模拟设备

我有一个设备和这个设备的驱动程序。我想做的是构建一个模拟USB设备以与第三方应用程序通信的应用程序。更具体地说,我正在尝试构建一个应用程序,该应用程序可以模拟模仿MicrosoftZune的USB设备。我想这样做,以便我的应用程序可以注册为zune设备,然后与客户端通信。我已经在我的应用程序中添加了几个DLL,以便尝试确定告诉软件连接的设备是合法zune的调用,但到目前为止我运气不佳。我是这种类型的开发的新手-即模拟硬件设备,而且我在导入用C/C++编写的dll方面不是很有经验。我正在使用VisualStudio2010(.net4.0)来开发我的应用程序,如果有人能为我提供模拟硬件的

c++ - CUnit - 'Mocking' libc 函数

我正在使用CUnit进行项目单元测试。我需要测试我是否使用正确的参数调用libc函数以及我是否以正确的方式处理它们的返回值。例如:如果我调用bind(...)函数-我想检查我传递了哪个af参数并断言如果这是错误的,我还想模拟它的返回值并断言如果我检查它正确的方法。出于这些目的,我希望CUnit环境有一个内置机制,让我在测试时调用“模拟”bind()函数,在运行代码时调用真正的bind()函数——但我不能找到这样的东西。如果我遗漏了CUnit中的某些内容,您能否告诉我,或者建议一种实现方法。谢谢,乔。 最佳答案 不幸的是,您不能使用C

c++ - C++ 中的模拟对象

什么是Mock对象?你能解释一下这个概念吗?如何在C++中使用Mock对象?任何来源示例都将非常有帮助。 最佳答案 继续阅读mockcpp你会找到问题的答案。模拟非常适合测试目的,您可以专注于测试一件事并模拟环境中其他部分的行为。 关于c++-C++中的模拟对象,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3809513/

c++ - 单元测试、模拟和 unique_ptr

有一个正在测试的类目前接受unique_ptr&&在它的构造函数中,表示它想要获得接口(interface)实现的单一所有权。想要使用模拟Interface测试此类时会出现问题虽然:模拟框架(HippoMocks)只给我Interface*我不拥有,因此无法删除。我以前在测试constshared_ptr&的类(class)时遇到过同样的问题作为参数,但通过提供自定义的无操作删除器来修复:templatevoidNoDelete(T*){}//createashared_ptrwithouteffectivedeletertemplatestd::shared_ptrmock_shar

c++ - 无趣的模拟函数调用 bla() && 预期 : to be called at least once bla()?

我用模拟类编写了一个小测试。当我运行它时,首先我得到一个警告,说调用了一个无趣的模拟函数,然后测试失败,因为没有满足预期,即至少调用了一次模拟函数。有趣的是,当我看到上面的警告消息时,该函数被调用了。你对这件事有什么想法吗?谢谢!编辑:这是我的代码结构:classBla{public:Bla();virtual~Bla();virtualfloatmyFunction();}classMockBla:publicBla{MockBla();~MockBla();MOCKMETHOD0(myFunction,float());}classCallerClass{public:Caller

c++ - 当我在测试期间手动设置 errno 时,strerror_r 返回垃圾

在测试期间,我有一个模拟对象,它设置了errno=ETIMEDOUT;我正在测试的对象看到错误并调用strerror_r取回错误字符串:if(ret){if(ret==EAI_SYSTEM){charerr[128];strerror_r(errno,err,128);err_string.assign(err);}else{err_string.assign(gai_strerror(ret));}returnret;}我不明白为什么strerror_r返回垃圾。我什至试过打电话strerror_r(ETIMEDOUT,err,128)直接但仍然有垃圾。我肯定错过了什么。看来我得到的