问题标签 [googlemock]

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 回答
362 浏览

c++ - 如何设置 boost::shared_array 的期望

我正在为某些类编写一些单元测试。这些类使用另一个类comms_client来执行网络通信。例如,comms_client提供一个send接收参数 a 的方法boost::shared_array

为了测试类发送的内容,我想创建一个模拟类,它允许我检查发送的数组的内容是否正确。模拟类看起来像

不幸的是,我还没有找到将期望放在具有这种类型的参数中的方法。我尝试使用,testing::ElementsAreArray但它会引发编译错误。是否有一个函数可用于将期望放在具有此类类型的参数中?您能否为 gmock 库提供自定义谓词或类来比较预期参数和实际参数?

0 投票
1 回答
13592 浏览

c++ - 谷歌测试返回值

我正在使用 Google Test 和 Google Mock 框架进行项目的单元测试。我有各种单元测试项目,并希望自动化我的构建以便运行所有这些项目。

我期望单元测试可执行文件在成功时返回 0,在任何测试失败时返回 1(或任何其他值),但是当所有测试通过时我得到 1。我收到了一些 GMOCK 警告,但找不到任何有关影响返回值的警告的文档。

我尝试运行测试过滤以仅运行一个测试用例,其中没有触发 GMOCK 警告并且仍然获得 1 作为返回值。

我有几个 DISABLED 测试用例,所以我将它们注释掉。仍然得到 1 作为返回值。

根据RUN_ALL_TESTS宏的文档和代码注释,返回值应为 0。

我想不出其他任何导致返回值 1 的东西。我错过了什么吗?

0 投票
1 回答
6923 浏览

c++ - 使用 NiceMock 作为 GoogleMock 的实例变量

我想用方法的返回值分配一个 NiceMock。NiceMock 是一个实例变量。

固定方法是:

编译器抛出以下错误:

如何用夹具方法的返回值分配实例变量?

0 投票
3 回答
4025 浏览

c++ - 使用 Google Mocks 模拟免费功能

我有以下免费功能信号:

我需要将这样一个函数的地址传递给迭代这些句柄的迭代器的构造函数。由于此函数的具体实现访问外部依赖项,我需要模拟它。

我想使用 google mock 来模拟这个函数,但我不确定如何。

这是我尝试过的:

然后是这样的:

但这不会编译,给出错误:

'MockAttributeIterator::getAttribute':函数调用缺少参数列表;使用 '&MockAttributeIterator::getAttribute' 创建指向成员的指针

关于我如何做到这一点的任何建议?

0 投票
1 回答
702 浏览

c++ - 单元测试时操作迭代器

我依赖于使用以下结构的 ac api(函数名称只是一个示例):

所以我首先调用 getRoot 来获取根的文件夹句柄。为了获得根文件夹中第一个文件的句柄,我调用 getFile() 并传入文件夹句柄。要获取此级别的第二个和后续文件,我调用 getNextFile,传入前一个文件句柄。

我以一组 C++ 接口的形式包装了它,如下所示:

在单元测试中,我需要做的就是使用 IEntry、IFolder、IFile 等的 Google Mock 实现,这非常方便。此外,接口以更易于理解和使用的方式组织来自 c api 的功能。特定接口的实现包装了相关的句柄。

我使用迭代器将 getFile 和 getNextFile 之类的函数调用联系在一起,在这种情况下,它们会遍历文件夹中的文件。api中有很多这样的函数对,所以我使用一个名为Iterator的模板类来创建我的C++风格的迭代器。

我实际上使用的是 std::shared_ptrs,而不是普通的指针。

所以这里是一个单元测试的例子:

然而,当涉及到迭代器的使用时,事情变得更加棘手。这是我在这种情况下使用的方法:

该测试正在测试 else 子句。我还有另外两个测试测试其余代码(一个文件和多个文件)。

函数 loadFileIteratorWithZeroItems 正在操作迭代器的内部结构,以便迭代零个项目。loadFileIteratorEnd 设置 filesEnd() 的返回值。这是 loadFileIteratorWithZeroItems:

工厂用于创建迭代器指向的项目。在单元测试的情况下,这是一个模拟版本。内部迭代器是函数 getFile() 和 getNextFile() 以及所有此类对的包装器,带有接口 getFirst() 和 getNext()。

我还有名为 loadFileIteratorWithOneItem 和 loadFileIteratorWithTwoItems 的函数。

任何人都可以建议一种更好的方法来测试上面的函数 b 吗?

我的设计从根本上被剥削了吗?迭代器实现有问题吗?

0 投票
4 回答
2364 浏览

c++ - GoogleMock 显示更详细的调试信息

我在工作中使用 googlemock。我们经常使用 EXPECT_THROW、EXPECT_NO_THROW 等...

我的问题是,当函数包装在 EXPECT_NO_THROW 中但实际上引发异常(即代码错误)时,如何让 googlemock 输出异常详细信息以及堆栈跟踪?

我得到的唯一输出是它引发了异常并且测试失败......这对于调试根本原因没有用。

0 投票
2 回答
2511 浏览

c++ - 使用 std::shared_ptr 检测循环引用

为了依赖注入(测试驱动开发)的目的,我正在使用很多接口。因此,我的很多对象都通过 std::shared_ptr 指向。我会使用 std::unique_ptr 但他们在谷歌模拟时没有所需的复制构造函数。

如果发生循环引用,我可以采取哪些措施以及早发现循环引用?

我正在使用谷歌测试在 linux 平台上工作。

0 投票
1 回答
2172 浏览

c++ - Google Mock:如何测试这段代码?

我编写了以下代码以使用 Google Mock 进行模拟Xyz::xyz_func测试。Abc::abc_func

但我收到以下错误。我想知道我们如何告诉 Xyz 类调用 abc_func 的模拟而不是实际的实现。请你帮助我好吗。

0 投票
3 回答
7734 浏览

c++ - 将 GoogleMock 与 Boost::Shared Pointers 一起使用时泄漏的模拟对象

对于这种特殊情况,我无法摆脱泄漏。

执行测试时,我收到 Leaked Mock Objects 的消息。具体信息:

ClassElementFixture.h:102:错误:这个模拟对象(在测试 ClassElementFixture.initialize 中使用)应该被删除,但永远不会。它的地址是@0x940a650。

我标记了错误所指的行。这是我的代码的简化版本:

我已经找到了 为什么 GoogleMock 会泄露我的 shared_ptr?

在 Stack-Overflow,这是相关的。但是那里的建议并不能解决我的问题:X

为了至少抑制错误,我发现的唯一可能性是:

然而,这不是一个非常干净的解决方案 =)

那么如何正确的去除漏水呢?

0 投票
1 回答
19899 浏览

c++ - 将容器与 GoogleTest 进行比较

我正在尝试进行比较两个向量的有效 googletest 测试。为此,我使用 google mock 及其匹配器,但我收到 C3861 错误,提示“未找到 ContainerEq 标识符”,并且 C2512 提示“testing::AssertionResult 没有可用的正确默认构造函数”。为什么?