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

c++ - 在 GMock Wrap 函数中设置值时内存损坏

我有一个要求,我需要使用 GTest/GMock 模拟一个非虚拟函数。因此,我已经包装了该函数并将其链接到测试套件“tst_def”文件中。对于包装函数,一个整数通过引用传递,当我将包装函数内的任何值设置为该整数时,测试套件在执行期间“因内存损坏而崩溃”(分段错误)。

重要观察:
当我在包装函数中为该整数设置与创建期间分配的相同默认值时,不会发生此崩溃,但仅当我分配任何其他值时才会崩溃。

编辑

考虑一下,传递给这个包装函数的 value1 的初始值为 0。

0 投票
1 回答
1468 浏览

c++ - 使用 gmock 模拟 pthread_create

我有一个调用pthread_create(...). 是否可以模拟并期望输出,pthread_create所以我实际上并没有启动线程?

我问这个是因为整个类是一个模拟对象,一旦我在测试用例结束时删除对象,线程段。

0 投票
1 回答
1997 浏览

unit-testing - 如何在while循环中的函数上设置expect_call?

我正在使用 gmock、gtest 框架来测试我的代码中的函数。我嘲笑了在正在测试的主函数中调用的函数。模拟函数处于无限循环中,仅在成功的情况下退出,并在失败的情况下保持打印错误消息。模拟函数看起来像这样,

现在我想让套接字函数失败并打印错误。我设法打印了错误,但由于它在他的 while 循环中,它一直在打印错误消息。我如何期望 gtest 在 1 或 2 次后停止打印。我把期望这样

我尝试使用 .Times(2),但没有成功。

0 投票
1 回答
13946 浏览

c++ - 在 EXPECT_CALL 中使用 google mock 的 EXPECT_THAT?

我正在使用谷歌模拟。该文档说我们可以在 EXPECT_CALL 或 ON_CALL 中使用 EXPECT_THAT,但是这样的代码似乎无法编译:

我知道 EXPECT_THAT 是一个宏,所以它扩展到一些不应该出现在那里的语句。那么“在 EXPECT_CALL 中使用 EXPECT_THAT”是什么意思呢?怎么做?

谢谢

0 投票
1 回答
1117 浏览

unit-testing - 使用带有 GMock (0.8.0) 的模拟服务测试 Grails 控制器

我有一个 grails 2.1 应用程序,它有一个控制器,它调用服务上的方法,传入请求和响应:

我想对这个方法进行单元测试。我想使用 GMock(版本 0.8.0)这样做,所以这就是我尝试的:

现在这失败了,说它没有达到对请求的期望。

但是,如果我这样编写测试:

测试会顺利通过的。据我所知,它们都是 GMock 语法的有效用法,那么为什么第一个失败而第二个没有呢?

干杯,

0 投票
2 回答
1284 浏览

unit-testing - 在 gmock/gtest 中包装常见的模拟函数

在我的 gtest 框架中,我模拟了一些函数并编写了一些测试用例。而且我看到我在许多测试用例中一遍又一遍地使用相同的模拟函数和 EXPECT_CALL。所以,我只是想知道我是否可以将这些常见的模拟 EXPECT_CALL 放在一个地方并简单地调用它们,这样行数就会变得更少,并且测试用例看起来更简单。

我尝试将它们放在一个函数中并尝试调用该函数,但它给了我很多编译问题。任何人有任何想法?

0 投票
1 回答
168 浏览

c++ - 如何取消注册测试用例以及如何将特定测试用例注册到 Gtest

如我们所知,在 gtets 中,当控件找到TESTTEST_F运行时,它registerstest cases进入gtest. 但根据我的要求,在 gtest 注册完所有测试用例后,我需要搜索testcasename列表中是否存在?如果tesetcasename存在,那么我需要注销所有测试用例并仅注册找到的testcasename. 怎么做???认为

假设我"testcasename3"registered testcasename. 它是可用的。现在我希望 gtest 只执行找到的测试用例而不是全部......

怎么做?

任何答案表示赞赏

0 投票
1 回答
1445 浏览

gmock - gmock 匹配器与我的引用不匹配

我在像这样的类中有一个模拟函数

这被嘲笑为

我为此设置了一些默认操作,例如

我的测试代码调用

但 gmock 没有返回 1,而是给了我以下错误:

operator ==是为对象定义的bar。为什么 gmock 找不到我的默认操作?

0 投票
1 回答
2079 浏览

deadlock - 当一个模拟返回一个模拟作为默认值时,gtest 在解构夹具期间挂起

我发现了一种我无法理解也无法解决的奇怪行为。我有一个工厂 FooFactory,它提供了一些真实的对象类型Foo。为了测试Foo我模拟的对象的方法调用FooFactory,以这种方式MockFooFactory返回MockFoo我可以期待调用的对象。

测试(不包括在内)工作正常,但在 MockFooFactory 的解构期间测试 gmock/gtest 挂起(似乎是互斥问题)。准确地说,删除 Default ON_CALL 会导致创建 Mutex 时出现问题。

智能指针一定有问题,当我构建没有智能指针的版本时,它工作正常。但是我测试的软件使用 shared_ptr 作为智能指针,所以我无法摆脱它们。

这是我构建的重现错误的示例:

有没有人遇到过同样的问题或有解决方案?

0 投票
3 回答
5147 浏览

c++ - 使用 gmock 的具有 11 个参数的模拟方法

我正在使用 gmock 在遗留代码中模拟我的依赖项。其中一个类有一个带有 11 个参数的方法。当我尝试使用 MOCK_METHOD11_WITH_CALLTYPE 来模拟它时,我发现这个宏不存在。gmock 最多只支持 10 个参数。你对此有何建议?我用假人实现这个方法吗?还是复制和扩展宏?谢谢!

PS,我现在不需要在我的测试中模拟这个方法,但将来可能需要这样做。

此致,