问题标签 [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.

0 投票
1 回答
7311 浏览

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

我刚开始使用 C++ 和单元测试,我有一些类似于上面的代码,我想使用 gmock 来测试SuperFoo::update()调用基类的move()方法。攻击这种情况的最佳方法是什么?

0 投票
2 回答
3839 浏览

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 之间的明显区别?

我看到的错误

我修改了这个错误只是为了反映我的例子。

预先感谢您的帮助。

0 投票
2 回答
6577 浏览

gmock - 设置 EXPECT_CALL 以将调用重定向到原始方法

我有一个类有几个相互依赖的方法。让我们说 foo()、bar() 和 baz()。

当我测试 bar() 时,我需要模拟 foo() 的行为,当我测试 baz() 时,我需要模拟 bar() 的行为。

如果我为 baz 模拟 bar,我不能使用相同的模拟类来使用模拟的 foo() 来测试 bar。

我的问题是我可以设置 EXPECT_CALL 来实际调用原始行为以及如何调用。这将消除创建多个 Mock 类的需要。

0 投票
3 回答
817 浏览

c++ - CMakeLists + gtest

我的项目中有一个目录树:

我也有我的 gtest 和 gmock 库:

我想知道我是否应该将 移动project/CMakeLists.txtsrc/目录?

我的目标是在编译二进制文件或单元测试之间做出选择。我想知道 CMakeLists 如何实现这一目标。

0 投票
1 回答
266 浏览

groovy - 使用 groovy gmock v 0.8 进行部分模拟

我无法使用 gmock 在 groovy 中找出部分模拟。我有以下代码:

和测试用例:

我指的是这里的文档。断言因 java.lang.AssertionError 失败:验证时期望不匹配:

可能有什么问题?

0 投票
0 回答
206 浏览

c++ - 使用 gmock 模拟在客户端代码中复制的对象

在这种情况下,我真的可以使用一些帮助来模拟依赖项。

我有一个需要测试的客户端功能。它需要一个第 3 方 API 资源并在其上调用一个方法,并用输出填充其其余参数:

在此函数流程的某个时刻,它调用了签名如下所示的 busMgr 对象:

使用该调用的客户端代码如下所示:

我遇到的问题是从 GetNumberOfCameras 返回的错误副本到 err 局部变量。在制作副本之前,模拟 BusManager 和 Error 类是有效的。由于模拟错误是 ThirdPartyAPI::Error 的子类,因此赋值运算符将模拟切掉。第三方 API 构造有效的错误对象并返回它们。客户端代码只能复制构造或分配它们。

我所需要的只是从我的模拟 BusManager 返回有效的模拟错误对象,以便 SUT 方法可测试。只要意图保持不变,我愿意重构 SUT 方法。

任何建议将不胜感激!

干杯,

亚历克斯

0 投票
1 回答
2292 浏览

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。

0 投票
1 回答
18897 浏览

c++ - 有没有办法用 ON_CALL 使模拟函数“有趣”?

鉴于:

输出是:

在这两种情况下,Gmock 的行为都是正确的,只要应用该行为(或者不是,在 TC33 中)。但是为什么在这两种情况下都说“无趣的模拟函数调用”呢?模拟函数调用是否只有在指定时才有意义EXPECT_CALL

0 投票
1 回答
652 浏览

c++ - 我应该使用哪个 C++ 单元测试框架来运行涉及 libcurl 的测试?

我编写了使用 libcURL 从给定网页检索信息的代码。我想为此代码编写一个单元测试。我曾尝试使用 cmake 执行此操作,但遇到了各种问题。是否有另一个框架可以让我更轻松地完成这项工作?

以下是有关我在使用 cmake 时遇到的问题的详细信息:

以前,我使用 tinyweb 作为单元测试的一部分向本地主机发送测试网页。然后我使用多个命令将值输入到我的代码中(这将从本地主机检索相关信息)并杀死 tinyweb。整体结构与此类似:

使用多个命令进行 CTest

我遇到了很多问题。一旦执行了启动 tiny.exe 的命令,ctest 的下一行将不会运行,直到 tiny.exe 被杀死。

我之前尝试过使用批处理文件做类似的事情,但是 tiny.exe 在意外的时候被杀死了。

0 投票
2 回答
244 浏览

unit-testing - 警告中缺少模拟对象名称

当 gmock 看到一个它不期望的方法调用时,它会写一个这样的警告:

当单元测试中的每个模拟对象都有一个名为“构造函数”的方法时,这不是很有帮助,因为找出哪个对象创建了这条消息并且缺少一个 EXPECT_CALL 并不总是那么容易。

有没有办法告诉 gmock 在这样的警告中也写类名或模拟对象的名称?