【问题标题】:Automatically Generate Google Mock Methods?自动生成 Google Mock 方法?
【发布时间】:2015-06-04 18:06:16
【问题描述】:

我是 C++ 和单元测试的新手,我现在正在学习使用 Google Mock 和 Google Test 来测试我正在使用的一些代码。除了手动编写所有 Google Mock 方法之外,有没有办法将 Google Mock 指向您的类并让它为您的所有函数自动生成所有 Google Mock 方法?

有人告诉我他们认为这应该是可能的,但由于我是新手(几周前刚开始学习 C++)我不知道这是否可能。

【问题讨论】:

  • 嗯,从给定接口自动推导出模拟方法定义应该相当容易。虽然我不知道有这样的工具可以为你做这件事(顺便问一下,这里是 OT)。

标签: c++ methods googletest googlemock


【解决方案1】:

引用 gmock 文档:

如果这对你来说工作量太大,你会发现 gmock_gen.py Google Mock 的 scripts/generator/ 目录中的工具(由 cppclean 项目)很有用。此命令行工具要求您 已安装 Python 2.4。你给它一个 C++ 文件和一个名字 在其中定义的抽象类,它将打印 模拟课给你。由于 C++ 语言的复杂性,这 脚本可能并不总是有效,但它可以非常方便

https://code.google.com/p/googlemock/wiki/ForDummies

因此,您只需将标头传递给 python 脚本,它就会输出一个可以使用的模拟实现。根据我的经验,它并不总是 100% 正确,但修复相对简单,所以我自己使用这个解决方案。

【讨论】:

  • 这是对我接受的答案投反对票的理由吗?真的??无论如何,询问工具是题外话。
  • 不是我做的。至少你是在草率下结论,除非我记错了自己的行为
  • 奇怪。我真的,真的,不记得做过那件事。如果我这样做是因为点击错误,那么抱歉
  • 如果你现在投了赞成票,似乎不是你。编辑以从您的回答中释放我的反对票。
  • If even this is too much work for you。多么光荣的声明。一些代码生成器(我在这里查看另一个 Google 产品)会生成数兆字节的 C++ 源代码,而不仅仅是懒惰激发了代码生成器。交付产品而不是花费数周时间一遍又一遍地转录出std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface < ,是不是“工作量太大”?
【解决方案2】:

" 除了手动编写所有 Gmock 方法之外,有没有办法将 Gmock 指向您的类并让它自动为您的所有函数生成所有 Gmock 方法?"

嗯,我大部分时间都在做的就是从界面复制一行

 struct IFace {
     int doThefancyOperatiion(std::string s, int i) = 0;
 };

并将其更改为

 struct MockIface {
       MOCK_METHOD2(doThefancyOperatiion, int (std::string s, int i));
 };

看起来可以使用sed 或任何其他相当不错的文本替换工具来完成。不是我知道一个特定的,它为你做这个。

【讨论】:

  • 谢谢,这就是我现在正在做的事情。只是不知道这是否可能。在 Gmock 文档中没有找到任何地方说它是可能的。
  • 想解释一下如何让 sed 计算模板化 C++ 参数的数量(对于 MOCK_METHOD2 与 MOCK_METHOD3)?或者如何使用sed知道返回类型是Foo<Bar, std::function<baz(qux)>>而不是Foo<Bar, ?
猜你喜欢
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 2015-08-09
  • 2016-01-04
相关资源
最近更新 更多