单元测试学习: mock有复杂行为的接口

来源:互联网 发布:战舰世界 数据更新出错 编辑:程序博客网 时间:2024/05/21 22:39

一, 问题

      gmock 提供了EXPECT_CALL的WillOnce 和WillRepeatedly方法来模拟返回值比较简单的情况(可以参考http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html),  但是有时需要模拟更复杂的行为. 例如需要 "返回一个有序数列中大于某个值的最小数", 即stl中的lower_bound方法, 问题主要有两点:

  • 返回值依赖于参数, 并且有复杂的逻辑,  简单的Return无法满足需求
  • 返回值还依赖于特定的数据, 需要预先设置

二, 解决方案

  1. 通过Invoke动作调用一个自定义函数, 在该函数中实现逻辑
  2. 将这个函数写成仿函数, 将数据预设进去.

三, 代码示例

mock类:

仿函数:

单测代码: 

0 0
原创粉丝点击