几个月前 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>
- 从接口派生出 mock 类。对于每个虚方法,计算它的参数个数、名字和结果 n,然后使用MOCK_METHOD_n_进行定义,其参数就是方法的名字和类型。
- 创建该 mock 类的一个实例。当你使用真实对象时,实际使用的就是该 mock 对象。
- 设置该 mock 对象的期望(是否会被使用?将要做什么?)。例如,第一个EXPECT_CALL表示会调用FetchTaxRate()并返回一个错误。underscore (_) 是一个匹配器(matcher),表示参数可以是任何值。Google Mock 有很多可用的匹配器,你可以使用他们精确指定参数是什么。你还可以定义自己的匹配器或者使用一个确定的值。
- 使用 mock 对象的测试代码。如果某个 mock 方法的调用次数超过了期望值或是参数不正确你就会立刻看到一个错误。
- 当 mock 对象销毁时,系统会检查其上的期望是否都满足了。
这里是一些有用的链接: Google Mock 主页、完整的文档及二进制下载。 Google Mock for Dummies 是对 Google Mock 的一个快速介绍,它还包含一些例子和说明。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论