问题标签 [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.
c++ - 您可以使用 googlemock 对不属于某个类的函数设置期望吗?
如果在我的 main 中有一个从 main 调用的函数 func,我可以使用 googlemock 说 EXPECT_CALL( no_class_here , func).Times(1) 吗?
no_class_here类似于范围运算符,表示它不属于一个类,::。我不知道这将如何工作,但在功能实现中
我不想将 func 放在一个类中,因为它只是一个静态函数并且不需要一个类来运行......
我应该放弃并一直把我要测试的所有东西都放在课堂上吗?我知道 JUnit 和 JMock,Java 中的一切都是一个类,所以别无选择,但我想能够从一个只有虚函数的类继承下来的能力可能是允许 googlemock 完成工作的机制......
c++ - googlemock - 模拟返回复杂数据类型的方法
我想模拟一个返回复杂数据类型的方法
此代码无法编译:“宏“MOCK_CONST_METHOD0”传递了 3 个参数,但只需要 2 个”
我认为 googlemock 宏不理解 QMap 并将逗号解释为参数分隔符。
有没有办法告诉 googlemock QMap 是返回值?
c++ - 模拟整个库
我正在开发使用boost::asio
. 为了测试它,我需要从这个库中模拟一组类。我正在使用 Google Mock,它允许模拟虚拟方法。通常(且乏味)的过程是为我需要使用的每个类编写一个接口。
另一方面,Google Mock Cookbook 描述了模拟非虚拟方法的另一种方法:使用模板。我的问题是我可能需要同时模拟几个类(所以直接使用模板是行不通的)。于是我想:为什么不用两级模板呢?我想出了以下解决方案:
然后,正常的用法是:
虽然测试将是:
当被模拟的类具有带有复杂参数的方法(例如来自同一库的其他类可能未被模拟)时,这开始变得复杂。总而言之,它似乎没有规模化。对这个解决方案有什么想法,或者对解决问题的其他方法有什么建议吗?
c++ - 为什么 GoogleMock 会泄露我的 shared_ptr?
我使用 GoogleMock/GoogleTest 进行测试,当匹配器将 shared_ptr 作为模拟参数并在同一个 shared_ptr 上调用 EXPECT 时,我看到了一些奇怪的行为。有问题的代码:
运行此测试时,我得到
知道为什么会这样吗?我宁愿不用Mock::AllowLeak
。
c++ - Googletest - DeathTest 无法从 Qt 应用程序(例如 Q_ASSERT 等)捕获断言。
我想用 gtest 测试一个断言。该方法如下所示:
测试看起来像这样:
这个测试适用于 linux 下的 gcc。
但是在windows下的visual studio 2010这个测试有问题。
当我运行测试时,会打开一个错误窗口。它显示断言失败。当我关闭窗口时,所有测试都完成了。没有测试失败。
我认为 gtests 启动了一个导致断言失败的新进程并评估进程输出。这有效并且测试通过。
但是当 Visual Studio 注意到新进程失败时,它会创建错误窗口。
如何抑制错误窗口?
c++ - 将 googlemock EXPECT_CALL 与 shared_ptr 一起使用?
我有一个测试可以很好地使用原始指针,但是我无法让它与std::shared_ptr
. 类是这样的:
我的测试代码是这样的:
在这个测试中,service_
是在测试中的堆栈上创建的模拟/伪造,我将地址传递给MyClass
. 更改MyClass
为service
a shared_ptr
,我的新课程如下所示:
我在测试中尝试的是:
但是,当我这样做时,测试失败并显示:
简而言之,我需要一个shared_ptr
to service_
(这是一个假对象)来传递给MyClass
构造函数,并且我需要一个函数的非指针EXPECT_CALL
。我怎样才能让它正常工作?
更新
尝试动态分配 SomeServiceFake 以获取 shared_ptr 然后使用 * 运算符 on service_
,这让我“更进一步”,但现在我收到以下错误:
更新 2
使用Mock::AllowLeak(service_.get());
所以我现在可以解决这个问题。希望我能得到答案。
c++ - 单元测试采用“特征”模板参数的对象
我有一个 Visual Studio 2008 C++03 项目,我想在其中对一个使用公开静态方法(基于策略的设计、策略模式)的特征模板参数的类进行单元测试。我正在使用 Google Test 和 Google Mock 框架。
例如:
显然这不会按原样工作。Google Mock 不能模拟静态方法,我需要在测试中创建一个 Mocked 类的实例来设置它的行为和期望。
那么使用 Google Test / Google Mock 对接受模板策略的类进行单元测试的正确方法是什么?
c++ - 当我#include "gmock/gmock.h" 时编译错误
我正在尝试将 googlemock 集成到我的测试中。我已经在 googletest 上成功构建并运行了测试,现在我也在尝试将 gmock 功能逐步添加到测试中,但是我遇到了一个我完全不理解的编译错误。
我没有尝试使用或定义模拟类,或使用 gmock.h 提供的任何东西。在我(以前工作的)tests.cpp 文件的顶部,我只需键入
我得到编译错误:
gmock/gmock-matchers.h(2497):错误 C2059:语法错误:'sizeof'
gmock/gmock-matchers.h(2505) : 请参阅正在编译的类模板实例化 'testing::internal::ElementsAreMatcherImpl' 的引用
gmock/gmock-matchers.h(2497):错误 C2059:语法错误:')'
gmock/gmock-matchers.h(2497):错误 C2143:语法错误:在 '{' 之前缺少 ')'
gmock/gmock-matchers.h(2497):错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
gmock/gmock-matchers.h(2499):警告 C4183:“消息”:缺少返回类型;假定为返回“int”的成员函数
我在 Windows 7 上使用 nmake/vc++ 编译它,我无法理解为什么我会通过将核心 gmock 包含文件添加到我的测试文件中来获得这些编译错误。有没有人见过这种东西?
c++ - 期待来自另一个线程的 googlemock 调用
使用谷歌模拟对象编写(谷歌)测试用例并期望从测试中的类控制的另一个线程调用 EXPECT_CALL() 定义的最佳方法是什么?在触发调用序列后简单地调用 sleep() 或类似方法并不合适,因为它可能会减慢不必要的测试并且可能不会真正达到计时条件。但是以某种方式完成测试用例必须等到模拟方法被调用。任何人的想法?
下面是一些代码来说明这种情况:
Bar.hpp(被测类)
Bar.cpp(摘录):
测试代码(摘录,到目前为止 FooInterfaceMock 的定义没有什么特别之处):
没有 sleep() 的测试结果:
启用 sleep() 的测试结果:
我想避免 sleep(),最好的情况是根本不需要更改 Bar 类。
boost - Google mock 不能使用 std::vector 的 boost::variant 编译
我正在尝试为一些使用 boost::variant 的接口类创建 Google Mock 对象
当我编译它时
g++ mytest.cpp -o mytest
我明白了
/usr/include/boost/variant/detail/variant_io.hpp:64: error: no match for 'operator<<' in '((const boost::detail::variant::printer > >*)this)-> boost::detail::variant::printer > >::out_ <<operand'</p>
boost::variant 是否与 std::vector 一起使用?似乎 boost::variant 适用于我定义的任何类型,但 std:vector 除外。为什么?
升压版 - 1.45 g++ 版 - 4.4.5