问题标签 [gmock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何使用 gmock 测试一个类调用它的基类方法
我刚开始使用 C++ 和单元测试,我有一些类似于上面的代码,我想使用 gmock 来测试SuperFoo::update()
调用基类的move()
方法。攻击这种情况的最佳方法是什么?
c++ - GTest 和 GoogleMock EXPECT_CALL 在 Windows 中失败,在 Mac 上通过 char * param
我在我继承的项目中有一个测试,看起来与此类似
缓冲区是一个 char * 指向一串数据。我插入了像对象这样的虚拟值,只是为了关注似乎是在使用 EXPECT_CALL 的问题。在此 EXPECT_CALL 之后立即调用一个方法 bar,该方法将原始字符串值作为参数,然后在方法中调用 foo 并使用从原始字符串值构建的缓冲区。
此测试在此项目的 Mac 版本上运行,但在 Windows 版本上失败。似乎是在比较两个 char 指针的指针地址,预期的和实际的,然后因为它们不同而失败。方法 foo 肯定是在 bar 中调用的。
如果此测试方法(EXPECT_CALL)比较指针地址而不是该指针处的数据,那么测试在 Mac 上是否也应该失败?
有没有人熟悉使用 EXPECT_CALL 和指针时 Mac 和 windows 之间的明显区别?
我看到的错误
我修改了这个错误只是为了反映我的例子。
预先感谢您的帮助。
gmock - 设置 EXPECT_CALL 以将调用重定向到原始方法
我有一个类有几个相互依赖的方法。让我们说 foo()、bar() 和 baz()。
当我测试 bar() 时,我需要模拟 foo() 的行为,当我测试 baz() 时,我需要模拟 bar() 的行为。
如果我为 baz 模拟 bar,我不能使用相同的模拟类来使用模拟的 foo() 来测试 bar。
我的问题是我可以设置 EXPECT_CALL 来实际调用原始行为以及如何调用。这将消除创建多个 Mock 类的需要。
c++ - CMakeLists + gtest
我的项目中有一个目录树:
我也有我的 gtest 和 gmock 库:
我想知道我是否应该将 移动project/CMakeLists.txt
到src/
目录?
我的目标是在编译二进制文件或单元测试之间做出选择。我想知道 CMakeLists 如何实现这一目标。
groovy - 使用 groovy gmock v 0.8 进行部分模拟
我无法使用 gmock 在 groovy 中找出部分模拟。我有以下代码:
和测试用例:
我指的是这里的文档。断言因 java.lang.AssertionError 失败:验证时期望不匹配:
可能有什么问题?
c++ - 使用 gmock 模拟在客户端代码中复制的对象
在这种情况下,我真的可以使用一些帮助来模拟依赖项。
我有一个需要测试的客户端功能。它需要一个第 3 方 API 资源并在其上调用一个方法,并用输出填充其其余参数:
在此函数流程的某个时刻,它调用了签名如下所示的 busMgr 对象:
使用该调用的客户端代码如下所示:
我遇到的问题是从 GetNumberOfCameras 返回的错误副本到 err 局部变量。在制作副本之前,模拟 BusManager 和 Error 类是有效的。由于模拟错误是 ThirdPartyAPI::Error 的子类,因此赋值运算符将模拟切掉。第三方 API 构造有效的错误对象并返回它们。客户端代码只能复制构造或分配它们。
我所需要的只是从我的模拟 BusManager 返回有效的模拟错误对象,以便 SUT 方法可测试。只要意图保持不变,我愿意重构 SUT 方法。
任何建议将不胜感激!
干杯,
亚历克斯
c++ - 在 QT 中配置 gmock
这是我第一次在 QT 中制作模拟对象。我正在尝试使用 Gmock,但我不知道如何使用它。现在,我在 QT 中创建项目 TestGmock(QT 应用程序),并将 gmock-1.7.0 中的包含文件夹(从https://code.google.com/下载)复制到 TestGmock 项目目录(与 gtest 相同) . 在主类中:
但是错误:
- C:\Qt\Qt5.2.1\Tools\QtCreator\bin\TestGmock\main.cpp:6: 错误:未定义引用 `testing::InitGoogleMock(int*, char**)'
- C:\Qt\Qt5.2.1\Tools\QtCreator\bin\TestGmock\gtest\gtest.h:2288: 错误:未定义对 `testing::UnitTest::GetInstance()' 的引用
- C:\Qt\Qt5.2.1\Tools\QtCreator\bin\TestGmock\gtest\gtest.h:2288: 错误:未定义对 `testing::UnitTest::Run()' 的引用 collect2.exe:-1:
- 错误:错误:ld 返回 1 退出状态
请帮助我在 QT 中使用 gmock 和 gtest。
c++ - 有没有办法用 ON_CALL 使模拟函数“有趣”?
鉴于:
输出是:
在这两种情况下,Gmock 的行为都是正确的,只要应用该行为(或者不是,在 TC33 中)。但是为什么在这两种情况下都说“无趣的模拟函数调用”呢?模拟函数调用是否只有在指定时才有意义EXPECT_CALL
?
c++ - 我应该使用哪个 C++ 单元测试框架来运行涉及 libcurl 的测试?
我编写了使用 libcURL 从给定网页检索信息的代码。我想为此代码编写一个单元测试。我曾尝试使用 cmake 执行此操作,但遇到了各种问题。是否有另一个框架可以让我更轻松地完成这项工作?
以下是有关我在使用 cmake 时遇到的问题的详细信息:
以前,我使用 tinyweb 作为单元测试的一部分向本地主机发送测试网页。然后我使用多个命令将值输入到我的代码中(这将从本地主机检索相关信息)并杀死 tinyweb。整体结构与此类似:
我遇到了很多问题。一旦执行了启动 tiny.exe 的命令,ctest 的下一行将不会运行,直到 tiny.exe 被杀死。
我之前尝试过使用批处理文件做类似的事情,但是 tiny.exe 在意外的时候被杀死了。
unit-testing - 警告中缺少模拟对象名称
当 gmock 看到一个它不期望的方法调用时,它会写一个这样的警告:
当单元测试中的每个模拟对象都有一个名为“构造函数”的方法时,这不是很有帮助,因为找出哪个对象创建了这条消息并且缺少一个 EXPECT_CALL 并不总是那么容易。
有没有办法告诉 gmock 在这样的警告中也写类名或模拟对象的名称?