问题标签 [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 投票
5 回答
50826 浏览

c++ - Gmock - 匹配结构

如何为输入参数匹配联合中元素的值,例如 - 如果我模拟具有以下签名的方法 -

如何匹配该方法的模拟在参数中使用正确的值调用?

0 投票
1 回答
9729 浏览

c++ - Gmock 设置参数

dequeue()在 GMock 测试方法中,我需要将 out 参数设置为变量的地址,以便 的 out 参数data指向变量ch

我试图找出副作用,但不断出错。

0 投票
1 回答
3297 浏览

c++ - 用于指针容器的 Gmock 元素匹配器

在我的单元测试中,我想测试 aGameLauncher创建一个Game包含一些Objects,基于CharacterSelections. 在 Java 风格的伪代码中,测试将是:

当我在 c++ 中工作时,game->getObjects()返回一个vector<Object*>. 我正在使用指针向量作为Object多态类型。

GMock#ContainerMatchers给出了容器的匹配器列表。由于 STL 容器使用operator==来确定其元素之间的相等性(请参阅github/cpp-container-equality),因此我不能简单地使用 UnorderedElementsAre(...) 因为这将执行指针比较。

我有哪些选择?

0 投票
1 回答
1193 浏览

c++ - 使用 C++/Gmock 在中间模拟

我有一个 A 类,它在其构造函数中实例化 B 类的对象。我想用 B 的模拟对象测试 A。

不,我不能将 B 的对象作为参数传递。还有其他方法吗?

我看到一篇文章http://www.ibm.com/developerworks/library/j-mocktest/index.html,其中“Mock in the Middle”是有趣的话题,但那是在 Java 中。在 C++ 中可能吗?

编辑:

通常,可以根据需要以其他方法创建对象。例如,

0 投票
2 回答
4755 浏览

gmock - 捕获 GMOCK 字符串参数

如果我有以下接口成员函数:

使用以下模拟

是否可以捕获传递给 print_string() 的字符串?

我尝试过了:

这会保存字符串的第一个字符,但不会保存整个字符串。

0 投票
1 回答
3526 浏览

c++ - 使用对象的 Google Mock 和 SetArgPointee

我最近在使用 GMock,但无法在以下代码中成功使用 SetArgPointee。

测试失败是因为调用 read 函数后的 ana2 对象没有正确设置字段 a 和 b。在 VS 中使用手表我可以看到 ana2.a 和 ana2.b 是垃圾值。

我在 GMock 烹饪书中读到我还需要一个复制构造函数和一个赋值运算符。如果我使用调试器,我可以看到复制构造函数被调用了 4 次,而赋值运算符从未被调用。

任何人都可以在这里指出错误吗?我需要做什么才能在 ana2 中读取与 ana1 相同的对象?

0 投票
1 回答
1146 浏览

c++ - 如何验证 Google Mock 中的两个 char * 是否相等?

假设我有一个这样的 Mock:

我想测试是否使用满足以下条件的对象调用 Write 方法:

  • 1) 当我在这个对象上调用 get_QL() 函数时,我收到 0 作为返回值
  • 2) 当我调用 get_MAC() 函数时,我收到一个 uint8_t*,我知道它的长度为 6,但没有字符串终止符。

如何在 GMock 中编写第二个条件?我尝试了类似的方法,但第二个属性无法正常工作。

0 投票
3 回答
7363 浏览

c++ - 在 Google Test 或 Google Mock 中比较特征矩阵

我想知道是否有一种好方法可以使用Google TestGoogle Mock测试两个Eigen矩阵的近似相等性。

以下面的测试用例作为简化示例:我将两个复数值矩阵A和相乘B,并期望得到某个结果C_expect。我使用 Eigen 计算数值结果C_actual = A * B。现在,我想比较C_expectC_actual。现在,对应的代码如下所示:

这有什么问题?好吧,我必须手动遍历矩阵的所有索引,然后分别比较实部和虚部。我更喜欢类似于 Google MockElementsAreArray匹配器的东西。例如

不幸的是,Google Mock 的内置功能似乎只适用于一维 C 风格或 STL 类型的容器。此外,我需要对矩阵的复数值进行近似比较。

我的问题:您知道是否(以及如何)可以教 Google Mock 迭代多个维度,并将复杂的浮点数与近似相等进行比较?

请注意,我不能只将数据指针作为 C 样式数组处理,因为存储布局可能在C_expect, 和C_actual. 此外,实际上,这些矩阵不仅仅是 2x2 矩阵。即某种循环绝对是必要的。

0 投票
3 回答
5334 浏览

c++ - 教 Google-Test 如何打印特征矩阵

介绍

我正在使用 Google 的测试框架 Google-Mock 对特征矩阵编写测试,正如另一个问题中已经讨论的那样。

使用以下代码,我能够添加自定义Matcher以将特征矩阵匹配到给定的精度。

这样做是通过他们的isApprox方法比较两个 Eigen 矩阵,如果它们不匹配,Google-Mock 将打印相应的错误消息,其中将包含矩阵的预期值和实际值。或者,它至少应该...

问题

采取以下简单的测试用例:

此测试将失败A,因为 和B不相等。不幸的是,相应的错误消息如下所示:

如您所见,Google-Test 打印矩阵的十六进制转储,而不是更好地表示它们的值。谷歌文档对自定义类型的打印值进行了以下说明:

这台打印机知道如何打印内置 C++ 类型、本机数组、STL 容器以及任何支持 << 运算符的类型。对于其他类型,它会打印值中的原始字节,并希望您的用户能够弄清楚。

特征矩阵带有一个operator<<. 但是,Google-Test 或 C++ 编译器会忽略它。据我了解,原因如下:此运算符的签名为(IO.h(第 240 行)

即它需要一个const DenseBase<Derived>&. 另一方面,Google-test hex-dump 默认打印机是模板函数的默认实现。你可以在这里找到实现。(跟随从PrintTo开始的调用树,看看情况是否如此,或者证明我错了。;))

因此,Google-Test 默认打印机是一个更好的匹配,因为它需要一个const Derived &,而不仅仅是它的基类const DenseBase<Derived> &


我的问题

我的问题如下。我如何告诉编译器更喜欢 Eigen 特定operator <<于 Google-test hex-dump?假设我不能修改 Eigen 矩阵的类定义。


我的尝试

到目前为止,我已经尝试了以下事情。

定义一个函数

不会因为不起作用的相同原因operator<<而起作用。

我发现唯一有效的是使用 Eigen 的插件机制

有一个文件eigen_matrix_addons.hpp

以及以下包含指令

测试将产生以下输出:

那有什么问题?

对于特征矩阵,这可能是一个可接受的解决方案。但是,我知道我很快将不得不将相同的东西应用到其他模板类,不幸的是,它不提供像 Eigen 那样的插件机制,并且我无法直接访问其定义。

因此,我的问题是:有没有办法在不修改类定义本身的情况下将编译器指向正确operator<<的或函数?PrintTo


完整代码


编辑:进一步的尝试

我在 SFINAE 方法上取得了一些进展。

首先,我为 Eigen 类型定义了一个特征。有了它,我们可以std::enable_if只为满足这个特征的类型提供模板函数。

我的第一个想法是提供这样一个版本的PrintTo. 不幸的是,编译器抱怨此函数与 Google-Test 内部默认值之间存在歧义。有没有办法消除歧义并将编译器指向我的函数?

另一种方法是重载operator<<Eigen 类型。它确实有效。但是,缺点是它是 ostream 运算符的全局重载。因此,如果不进行此更改也会影响非测试代码,就不可能定义任何特定于测试的格式(例如额外的换行符)。因此,我更喜欢PrintTo像上面这样的专业。


编辑:关注@Alex的回答

在下面的代码中,我通过 @Alex 实现了解决方案,并实现了一个小函数,将 Eigen 矩阵的引用转换为可打印类型。

0 投票
1 回答
2363 浏览

eclipse - 如何在eclipse中安装google test和google mock

我给了一个任务来研究谷歌测试和谷歌模拟。但我想尝试我所拥有的书中的代码。我四处寻找有关如何在网上的 eclipse 中安装 google test 和 google mock 的教程。但我找不到 Windows 基础教程。你能在窗口基地指导我吗?