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

c++ - GoogleMock - 匹配器和 MFC\ATL CString

我在 Google Group 上问过这个问题,但我想我会在这里得到更快的回复。

我正在尝试使用Google 的 Mocking 框架来测试我的代码。我也在使用他们的测试框架。我正在用VC9编译。我在匹配 MFC\ATL CStrings 的参数时遇到问题。GMock 说对象不相等,它似乎正在评估指针地址。我试图模拟的方法的结构如下:

因此:

在设定我的期望时,我正在做以下比较:

我尝试了许多不同的匹配器组合,例如:

上述任何调用都产生了相同的结果。还有其他人遇到这个问题吗?

这是输出:

Google Mock 尝试了以下 2 个期望,但没有一个匹配:

亚当

0 投票
3 回答
7844 浏览

c++ - 在不编辑生产代码的情况下在 C++ 中模拟非虚拟方法?

我是一个相当新的软件开发人员,目前正在向多年前开始的现有 C++ 项目添加单元测试。由于非技术原因,我不允许修改任何现有代码。我所有模块的基类都有一堆设置/获取数据和与其他模块通信的方法。

因为我只想对每个单独的模块进行单元测试,所以我希望能够为我的所有模块间通信方法使用固定值。即对于检查另一个模块是否处于活动状态的方法 Ping(),我希望它根据我正在做的测试类型返回 true 或 false。我一直在研究 Google Test 和 Google Mock,它确实支持模拟非虚拟方法。然而,所描述的方法(http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods)要求我将原始方法“模板化”以获取真实或模拟对象。由于前面提到的要求,我不能在基类中模板化我的方法,所以我需要一些其他方法来模拟这些虚拟方法

基本上,我想模拟的方法在某个基类中,我想单元测试和创建模拟的模块是该基类的派生类。在我的基本 Module 类和我想要测试的模块之间有中间模块。

我将不胜感激任何建议!

谢谢,

JW

编辑:更具体的例子

我的基类是 rootModule,我要测试的模块是 leafModule。有一个继承自rootModule的中间模块,leafModule继承自这个中间模块。

在我的leafModule 中,我想测试doStuff() 方法,该方法调用rootModule 类中定义的非虚拟GetStatus(moduleName)。我需要以某种方式使 GetStatus() 返回一个选定的罐头值。模拟对我来说是新的,所以使用模拟对象甚至是正确的方法吗?

0 投票
1 回答
3088 浏览

c++ - C++ 模拟/测试 boost::asio::io_stream - 基于异步处理程序

经过多年的 C#,我最近回到了 C/C++。在那些年里,我发现了模拟和单元测试的价值。

在 C# 中查找 Mocks 和单元测试的资源是微不足道的。WRT Mocking,与 C++ 无关。

我想要一些关于其他人如何使用 boost 模拟和测试异步 io_service 处理程序的指导。

例如,在 C# 中,我会使用 MemoryStream 来模拟 IO.Stream,并假设这是我应该采取的路径。

  • C++ 模拟/测试最佳实践
  • boost::asio::io_service 模拟/测试最佳实践
  • C++ 异步处理程序模拟/测试最佳实践

我已经用 googlemock 和 googletest 开始了这个过程。

0 投票
4 回答
33662 浏览

c++ - Google Mock 是一个很好的模拟框架吗?

我正在我的公司开展单元测试工作,需要选择一个模拟框架来使用。我以前从未使用过模拟框架。我们已经选择了 Google Test,所以使用 Google Mock 会很好。不过,看了Google Mock 的教程后,我的初步印象是:

  • 使用 MOCK_METHODn 宏重新声明模拟类中的每个方法似乎没有必要,而且似乎违背了 DRY 原则。
  • 它们的匹配器(例如,EXPECT_CALL(turtle, Forward(_)); 中的“_”)和匹配顺序似乎太强大了。就像,很容易说出你不是故意的话,这样会错过错误。

我对 google 的开发者有很高的信心,对自己判断 mocking 框架的能力信心不足,之前没用过。所以我的问题是:这些是有效的担忧吗?

或者没有更好的方法来定义模拟对象,并且匹配器在实践中使用起来是否直观?我会感谢任何以前使用过 Google Mock 的人的回答,并且与其他 C++ 框架进行比较会有所帮助。

0 投票
2 回答
4758 浏览

visual-studio-2010 - Visual Studio 2010 中的 GoogleMock 和 GoogleTest

有没有人在 Visual Studio 2010 中成功构建了 gmock 和 gtest?我已经尝试使用 1.5.0 版本,但我只得到难以理解的编译错误。

0 投票
2 回答
21910 浏览

c++ - 如何使用 Google Mock 模拟模板化方法?

我正在尝试模拟模板化方法。

这是包含要模拟的方法的类:

如何使用 Google Mock 模拟 myMethod 方法?

0 投票
1 回答
977 浏览

c++ - 如何使用签名`object()`模拟函数

我想用声明模拟一个方法A::B X(void)。定义如下。

我的模拟课,遵循这个,是相当标准的。

然而,编译后,这给了我这个奇怪的错误,我无法追踪它。这有什么问题?


更新我发现了一个失败的代码示例来证明这一点。

0 投票
4 回答
8328 浏览

c++ - Google Mock:模拟的重载函数会产生警告 C4373

我正在使用Google Mock和 VS2010 模拟一个具有 2 个重载函数的 C++ 类:

每次编译时,我都会收到以下警告两次:

知道为什么吗?
这是正确的行为吗?
我怎样才能避免这种情况?

0 投票
2 回答
8694 浏览

c++ - 使用 GMock 验证析构函数调用

使用 GMock,我如何验证一个类的析构函数是否被调用?除了将它包装在另一个类中之外,还有其他方法吗?

显而易见的方法EXPECT_CALL(object, ~classtype())会产生编译器错误(gmock 无法生成名为 的模拟方法gmock_~classtype)。

0 投票
3 回答
3522 浏览

c++ - 使用 throw() 说明符模拟方法

我正在尝试 Google 模拟一个具有 throw() 说明符的虚拟方法。原始函数如下所示:

我收到编译器错误:looser throw specifier for 'virtual FunctionSignature'

这是我迄今为止尝试过的代码:

我已经尝试了几乎所有我能想到的其他组合,但这些组合似乎最合乎逻辑。Google 如何使用 throw() 说明符模拟方法?