BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Google开源其C++ Mocking框架

| 作者 Abel Avram 关注 7 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2008年12月19日. 估计阅读时间: 4 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

几个月前Google开源了其C++测试框架,现在Google又基于BSD协议将其C++ Mocking框架Google Mock开源。

在Google内部Google Mock被用在100多个项目中,根据Google软件工程师Zhanyong Wan所说,Google Mock的灵感来自于jMockEasyMock。该框架可用在Linux、Windows及Mac OS X上,面向C++开发者。Zhanyong给出了一个mocking的例子

class TaxServer {   // Returns the tax rate of a location (by postal code) or -1 on error.
  virtual double FetchTaxRate(
    const string& postal_code) = 0;
  virtual void CloseConnection() = 0;
};

class MockTaxServer : public TaxServer {     // #1
  MOCK_METHOD1(FetchTaxRate, double(const string&));
  MOCK_METHOD0(CloseConnection, void());
};
TEST(ShoppingCartTest,  StillCallsCloseIfServerErrorOccurs) {
  MockTaxServer mock_taxserver;              // #2
  EXPECT_CALL(mock_taxserver, FetchTaxRate(_)).

WillOnce(Return(-1));                   // #3
  EXPECT_CALL(mock_taxserver, CloseConnection());
  ShoppingCart cart(&mock_taxserver);        // #4
  cart.CalculateTax();  // Calls FetchTaxRate()
                        // and CloseConnection().
}                                            // #5

  1. 从接口派生出mock类。对于每个虚方法,计算它的参数个数、名字和结果n,然后使用MOCK_METHODn进行定义,其参数就是方法的名字类型

  2. 创建该mock类的一个实例。当你使用真实对象时,实际使用的就是该mock对象。

  3. 设置该mock对象的期望(是否会被使用?将要做什么?)。例如,第一个EXPECT_CALL表示会调用FetchTaxRate()并返回一个错误。underscore (_)是一个匹配器(matcher),表示参数可以是任何值。Google Mock有很多可用的匹配器,你可以使用他们精确指定参数是什么。你还可以定义自己的匹配器或者使用一个确定的值。

  4. 使用mock对象的测试代码。如果某个mock方法的调用次数超过了期望值或是参数不正确你就会立刻看到一个错误。

  5. 当mock对象销毁时,系统会检查其上的期望是否都满足了。

这里是一些有用的链接:Google Mock主页完整的文档二进制下载Google Mock for Dummies是对Google Mock的一个快速介绍,它还包含一些例子和说明。

查看英文原文:Google Has Open-Sourced Their C++ Mocking Framework

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT