Google 开源其 C++ Mocking 框架

  • 2008-12-18
  • 本文字数:1120 字

    阅读完需:约 4 分钟

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

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

<p>class <b>TaxServer</b> {   // Returns the tax rate of a location (by postal code) or -1 on error. <br></br>  virtual double FetchTaxRate(  <br></br>    const string& postal_code) = 0; <br></br>  virtual void CloseConnection() = 0;<br></br>};</p>
<p>class <b>MockTaxServer</b> : public <b>TaxServer</b> {     // #1 <br></br><b>  MOCK_METHOD1</b>(FetchTaxRate, double(const string&));  <br></br><b>  MOCK_METHOD0</b>(CloseConnection, void()); <br></br>};   <br></br>TEST(ShoppingCartTest,  StillCallsCloseIfServerErrorOccurs) { <br></br><b>  MockTaxServer</b> mock_taxserver;              // #2  <br></br><b>  EXPECT_CALL</b>(mock_taxserver, FetchTaxRate(_)).</p><p><b>     WillOnce</b>(<b>Return</b>(-1));                   // #3 <br></br><b>  EXPECT_CALL</b>(mock_taxserver, CloseConnection());  <br></br><b>  ShoppingCart</b> cart(&mock_taxserver);        // #4<br></br>  cart.CalculateTax();  // Calls FetchTaxRate() <br></br>                        // and CloseConnection(). <br></br>}                                            // #5</p>
  1. 从接口派生出 mock 类。对于每个虚方法,计算它的参数个数、名字和结果 n,然后使用MOCK_METHOD_n_进行定义,其参数就是方法的名字类型
  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