<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>qaz1 (卡卡西森赛)</title>
    <link>https://ruby-china.org/qaz1</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>如何通过 Mock API 提高 App 开发效率？</title>
      <description>&lt;p&gt;APP 开发过程中，如果可以在客户端的正常项目代码中，自然地（不影响最终 apk）添加一种模拟服务器数据返回的功能，这样就可以很方便的在不依赖服务器的情况下展开客户端的开发。&lt;/p&gt;
Mock API 提供了这一问题的解决方案，通过事先定义好的接数据生成规则，让 APP 功能能
够快速测试，便于前后端开发同时进行。

&lt;p&gt;一，什么是 Mock？&lt;/p&gt;

&lt;p&gt;在软件测试领域，Mock 的意思是模拟，简单来说，就是通过某种技术手段模拟测试对象的
行为，返回预先设计的结果。&lt;/p&gt;

&lt;p&gt;二，Mock 有什么用？&lt;/p&gt;

&lt;p&gt;首先，Mock 可以用来解除测试对象对外部服务的依赖（比如数据库，第三方接口等），使
得测试用例可以独立运行。&lt;/p&gt;

&lt;p&gt;不管是传统的单体应用，还是现在流行的微服务，这点都特别重要，因为任何外部依赖的
存在都会极大的限制测试用例的可迁移性和稳定性。通过 Mock 去除外部依赖之后，不管
是测试用例的可迁移性还是稳定性，都能够上一个台阶。&lt;/p&gt;

&lt;p&gt;三，如何创建 Mock API 服务？&lt;/p&gt;

&lt;p&gt;针对不同的测试场景，可以选择不同的 Mock 框架和工具。&lt;/p&gt;

&lt;p&gt;1.Mockito&lt;/p&gt;

&lt;p&gt;国外知名的基于对象层的单元测试框架，通过 MockIto，可以编写大量的项目测试配置来
实现全面的项目测试服务。但是其功能过于庞杂，不一定适用于所有的项目。&lt;/p&gt;

&lt;p&gt;2.WireMock&lt;/p&gt;

&lt;p&gt;同样是国外接口测试领域的知名工具。和处在对象层的 Mockito 不同，WireMock 针对的是
API 的 Mock 测试工具，如果说 Mocketo 是单元测试的瑞士军刀，可以 Mock Everything，那
么 WireMock 就是专为小型项目而生的，支持 HTTP 响应存根、请求验证、代理/拦截、记
录和回放。但是仍然需要编写大量的 Mock API 规则，无法自动生成数据，在易用性上稍有
不足。&lt;/p&gt;

&lt;p&gt;3.eoLinker&lt;/p&gt;

&lt;p&gt;eoLinker 是目前国内最大的在线接口管理平台，不仅拥有非常全面的接口管理功能，并且
可以通过 UI 界面来设定 Mock 的规则，支持 Mock JS 和原生 js 的函数方法，简化 Mock API
的编写操作。&lt;/p&gt;

&lt;p&gt;值得注意的是，eoLinker 是一个在线的 SaaS 服务，用户无需任何部署，只需要写明 Mock
的规则，就可以通过 eoLinker 提供的 URL 来访问 Mock 服务，从使用门槛上来说是最低
的，推荐使用。&lt;/p&gt;

&lt;p&gt;其他类似的 Mock API 的框架还有 OkHttp 的 mockwebserver，moco 和 mockserver。
mockwebserver 也属于嵌入式 Mock 框架的范畴，但功能过于简单。moco，mockserver 虽
然功能完善，但需要独立部署，和以上产品相比不具有明显优势。&lt;/p&gt;

&lt;p&gt;小结：自上世纪末 Kent Beck 提出 TDD(Test-Driven Development) 开发理念以来，开发和测试
的边界变的越来越模糊，从原本上下游的依赖关系，逐步演变成你中有我、我中有你的互
赖关系，Mock API 的出现让这种依赖关系在测试中暂时分开，让开发更高效。&lt;/p&gt;</description>
      <author>qaz1</author>
      <pubDate>Wed, 04 Apr 2018 14:24:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/35397</link>
      <guid>https://ruby-china.org/topics/35397</guid>
    </item>
  </channel>
</rss>
