问题标签 [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.
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 让我头疼。哪个是测试仅标头模块的最简单解决方案?我将衷心感谢您的帮助!
c++ - 验证 std::vector使用 GMock 的对象的成员
我是 GTest/Gmock 的新手。下面是一个类:
当尝试使用下面的 EXPECT_CALL 函数使用 GTest/Gmock 验证此对象的成员时,如下所示,我收到错误error C2228: left of '.at' must have class/struct/union
任何输入/建议都会非常有帮助,谢谢。
c++ - 在没有依赖注入的情况下使用 gmock
我只是在学习使用 Google Mock。当我测试一个可以将模拟对象作为指针或引用(依赖注入)传递给它的类时,它工作正常。当我有一个不使用 DI 的课程时,我还没有找到解决方案。
我们目前有很多不使用 DI 和接口的代码,例如:
(这是极其简化的,但应该解释问题)
我们目前通过仅为单元测试创建一个名为 ReadDbObjects.cpp 的文件(其中包括带有类声明的原始 ReadObjects.h)来测试类似的东西,该文件静态链接到单元测试。在这个文件中,我们模拟了 ReadAll-Method,因此它返回了我们测试所需的对象。这个文件很难维护,它需要另一个在 ReadObjects.cpp 和单元测试中都知道的文件,因此测试和模拟的 ReadObjects 类之间的值可以双向传递。
- 在这个例子中,有没有办法使用 gmock 来模拟 ReadObjects?
- 当我需要模拟基类时,可以使用 gmock 吗?在这里,我们通过将模拟的 cpp 基类文件链接到单元测试中来使用相同的机制。
unit-testing - 如何使用嵌套闭包在 Groovy 中进行单元测试(模拟类)?
我从这里修改了代码,使其看起来非常像我拥有的代码,并且正在尝试为其创建单元测试。虽然我想问“什么是最好的方法”来测试它,但我对任何创建体面的单元测试的方法都非常满意!我查看了 Spock、GroovyTestCase 和 GMock,虽然它们中的每一个都可能非常有能力创建这样的测试,但我发现在所有情况下都缺少此类示例的文档。
我想要/需要做的是以我可以测试的方式模拟“http”:
我可能完全错误地处理了这个问题,并且将对单元测试此类代码的“正确方式”持开放态度。请耐心等待,因为这对我来说是新的!
c++ - 改变 gmock 期望
我有一个要在 GMock 中编写的单元测试。但是,我主要熟悉 Mockito。我会用 Mockito 写的是:
这对应于验证doSomething
从不调用someFunctionCall
但只被调用一次doSomethingElse
。
我如何用 GMock 完成同样的事情?
由于期望堆栈,显然不起作用。
c++ - GMock:必须始终是纯虚拟的模拟类的基类?
我已经阅读了 googlecode 中的良好做法。他们是对的,但我仍然对以下内容感到好奇:
有一些类定义,可以说:
如您所见,method_a不是纯vitual 。
我可以编码吗
没有黑暗的结果?
更深入。我可以在 MockA 中覆盖method_a吗?
像:
c++ - 在死亡测试中错误的函数调用评估
我正在使用 gtest 和 gmock 编写测试。我的大多数测试用例都应该因自定义断言(我模拟)而崩溃。麻烦来了:虽然断言很好地触发了,但我对预期的调用有很多问题。
以下代码是我为了使其工作而经历的三个步骤(因为是的,这部分工作):
MyTestedObject的构造函数开始检查参数是否为 NULL。如果其中至少有一个是,它应该触发一个断言。但是测试失败了,因为“从不调用失败”。调试显示它被调用。
然后我试图评论时代部分,以确保它来自这里并且这是唯一的问题。它有效,但还不够:我想确保程序从我的断言中消失。由于 EXPECT_CALL 的评估是在模拟对象被销毁时完成的,我猜出口调用搞砸了整个事情,所以我尝试了这个,它有效:
现在,我想确保没有调用其他函数。
我试图将myMockedObject放入StrictMock结构中并放入 EXPECT_CALL(...).Times(0),但我得到了与最初相同的模式:'exit' 调用似乎阻止了所有 EXPECT_CALL 评估。
任何提示/解决方法?:)
编辑:忘了告诉:执行环境。是带有 Visual Studio 2008 的 Windows 7。
unit-testing - 谷歌模拟的期望
我想用 gmock 说以下内容:
方法 A 应该被调用两次,一次使用参数 X,第二次使用参数 Y。不应再次调用该方法。
我知道如何做第一部分,但我怎么说永远不应该再次调用该方法?
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 下。所以我做错了什么?
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
完成工作。我想有些人会说“当然,你今天不需要灵活性,但谁知道明天呢?”。这对我来说似乎违反直觉,试图预览系统可能遇到的所有可能场景,但话又说回来,那里的人比我有更多的经验。
有什么想法吗?