问题标签 [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 回答
3094 浏览

c++ - 如何为具有多个模块(包括单元测试等)的项目设置 cmake

好的,这让我发疯了,所以我要向你们寻求帮助。我正在尝试建立一个目前很小的新项目。

为简单起见,我的项目结构类似于:
RootProject
- module1(这是一个仅标头库)
--include
---module1 ----
header files(包含模板,我想测试)--test ---testmain.cpp(使用gmock和boost单元测试框架) -CMakeLists.txt(1) -module2(另一个lib,使用 module1)--与模块1相同的结构 CMakeLists.txt(2)





所以,我有一个根 CMakeLists.txt 和每个模块的几个 CMakeLists.txt。

根 CMakeLists.txt:
`

但是有一个适用于 module1 的 CMakeLists.txt 让我头疼。哪个是测试仅标头模块的最简单解决方案?我将衷心感谢您的帮助!

0 投票
0 回答
532 浏览

c++ - 验证 std::vector使用 GMock 的对象的成员

我是 GTest/Gmock 的新手。下面是一个类:

当尝试使用下面的 EXPECT_CALL 函数使用 GTest/Gmock 验证此对象的成员时,如下所示,我收到错误error C2228: left of '.at' must have class/struct/union

任何输入/建议都会非常有帮助,谢谢。

0 投票
0 回答
1298 浏览

c++ - 在没有依赖注入的情况下使用 gmock

我只是在学习使用 Google Mock。当我测试一个可以将模拟对象作为指针或引用(依赖注入)传递给它的类时,它工作正常。当我有一个不使用 DI 的课程时,我还没有找到解决方案。

我们目前有很多不使用 DI 和接口的代码,例如:

(这是极其简化的,但应该解释问题)

我们目前通过仅为单元测试创​​建一个名为 ReadDbObjects.cpp 的文件(其中包括带有类声明的原始 ReadObjects.h)来测试类似的东西,该文件静态链接到单元测试。在这个文件中,我们模拟了 ReadAll-Method,因此它返回了我们测试所需的对象。这个文件很难维护,它需要另一个在 ReadObjects.cpp 和单元测试中都知道的文件,因此测试和模拟的 ReadObjects 类之间的值可以双向传递。

  1. 在这个例子中,有没有办法使用 gmock 来模拟 ReadObjects?
  2. 当我需要模拟基类时,可以使用 gmock 吗?在这里,我们通过将模拟的 cpp 基类文件链接到单元测试中来使用相同的机制。
0 投票
1 回答
1236 浏览

unit-testing - 如何使用嵌套闭包在 Groovy 中进行单元测试(模拟类)?

我从这里修改了代码,使其看起来非常像我拥有的​​代码,并且正在尝试为其创建单元测试。虽然我想问“什么是最好的方法”来测试它,但我对任何创建体面的单元测试的方法都非常满意!我查看了 Spock、GroovyTestCase 和 GMock,虽然它们中的每一个都可能非常有能力创建这样的测试,但我发现在所有情况下都缺少此类示例的文档。

我想要/需要做的是以我可以测试的方式模拟“http”:

我可能完全错误地处理了这个问题,并且将对单元测试此类代码的“正确方式”持开放态度。请耐心等待,因为这对我来说是新的!

0 投票
2 回答
1723 浏览

c++ - 改变 gmock 期望

我有一个要在 GMock 中编写的单元测试。但是,我主要熟悉 Mockito。我会用 Mockito 写的是:

这对应于验证doSomething从不调用someFunctionCall但只被调用一次doSomethingElse

我如何用 GMock 完成同样的事情?

由于期望堆栈,显然不起作用。

0 投票
1 回答
3025 浏览

c++ - GMock:必须始终是纯虚拟的模拟类的基类?

我已经阅读了 googlecode 中的良好做法。他们是对的,但我仍然对以下内容感到好奇:

有一些类定义,可以说:

如您所见,method_a不是vitual 。

我可以编码吗

没有黑暗的结果?

更深入。我可以在 MockA 中覆盖method_a吗?

像:

0 投票
1 回答
1118 浏览

c++ - 在死亡测试中错误的函数调用评估

我正在使用 gtest 和 gmock 编写测试。我的大多数测试用例都应该因自定义断言(我模拟)而崩溃。麻烦来了:虽然断言很好地触发了,但我对预期的调用有很多问题。

以下代码是我为了使其工作而经历的三个步骤(因为是的,这部分工作):

MyTestedObject的构造函数开始检查参数是否为 NULL。如果其中至少有一个是,它应该触发一个断言。但是测试失败了,因为“从不调用失败”。调试显示它被调用。

然后我试图评论时代部分,以确保它来自这里并且这是唯一的问题。它有效,但还不够:我想确保程序从我的断言中消失。由于 EXPECT_CALL 的评估是在模拟对象被销毁时完成的,我猜出口调用搞砸了整个事情,所以我尝试了这个,它有效:

现在,我想确保没有调用其他函数。

我试图将myMockedObject放入StrictMock结构中并放入 EXPECT_CALL(...).Times(0),但我得到了与最初相同的模式:'exit' 调用似乎阻止了所有 EXPECT_CALL 评估。

任何提示/解决方法?:)

编辑:忘了告诉:执行环境。是带有 Visual Studio 2008 的 Windows 7。

0 投票
1 回答
92 浏览

unit-testing - 谷歌模拟的期望

我想用 gmock 说以下内容:

方法 A 应该被调用两次,一次使用参数 X,第二次使用参数 Y。不应再次调用该方法。

我知道如何做第一部分,但我怎么说永远不应该再次调用该方法?

0 投票
1 回答
2847 浏览

eclipse - Eclpse CDT gtest 设置错误:找不到 -lgtest

我关注这个帖子

在 eclipse cdt 8.2.1 上设置 gtest 1.7。但是得到了这个错误:

顺便说一句,从 gtest 1.5 到 1.7 有一些变化,我实际上是这样制作链接的:

如您所见,libgtest 在 gtest1.7/lib/.lib(第二个隐藏目录)而不是 gtest1.7/lib 下。所以我做错了什么?

0 投票
2 回答
5322 浏览

c++ - 使用 GTest 和 GMock 进行测试:共享库与静态库

我认为这个问题可能违反了网站的一些问答标准,因为我可能收到的答案可能被视为意见驱动的。尽管如此,它来了......

假设我们正在开发一个 C++ 项目,使用 CMake 驱动构建/测试/打包过程,并使用 GTest 和 GMock 进行测试。进一步假设我们项目的结构如下所示:

当然,这是一个过于简单化的情况,但你明白了。

现在好了,如果这些模块是库并且每个测试(即 下的每个目录tests)都是可执行文件,我们需要将后者与前者链接起来。问题是,如果这些库是共享的,加载器当然需要找到它们。一个明显的解决方案是将测试的工作目录设置为库的目录,使用 CMake 的set_property. 但是,如果 GTest 和 GMock 也被构建为共享库,这将不起作用,因为它们也需要加载。

我想出的解决方案是:

  • 将两个库(即 GTest 和 GMock)复制到模块的构建目录。这感觉有点愚蠢,因为共享库的主要好处(即在程序之间共享代码)被完全绕过,我们最终在构建目录中得到了几个副本。
  • 将 GTest 和 GMock 都构建为静态库。这意味着我们现在最终将两个库的副本复制到每个可执行文件中,这增加了它的大小。尽管我们没有 1000 次测试,但这感觉有点尴尬。

所以,鉴于这种情况,我想知道是否有人曾经被它击中,以及他/她采取了什么道路。(如果解决方案不是我提到的解决方案,我会很高兴听到所有相关信息。)理想情况下,我希望能够make && make test运行所有测试,而无需运行任何测试额外的脚本来容纳东西。将所有库构建为静态库就可以了,但是如果我将它们构建为共享库呢?我必须建造两次吗?这很愚蠢。

另一个问题也沿着这些思路运行,但我认为它的解决方案涉及重新设计或类似的工件。假设module_foo依赖于第三方库,例如library_baz. 如果module_foo直接链接到library_baz,那么对前者的任何测试都需要加载library_baz,即使它可能正在测试不相关的功能。出现同样的问题。

在这里模拟似乎是正确的做法,但不知何故,我觉得重构module_foo以使其与接口对话(无论是动态多态还是静态多态)没有多大意义,因为它不需要这种灵活性:library_baz完成工作。我想有些人会说“当然,你今天不需要灵活性,但谁知道明天呢?”。这对我来说似乎违反直觉,试图预览系统可能遇到的所有可能场景,但话又说回来,那里的人比我有更多的经验。

有什么想法吗?