为 Google 地图 API 创建虚假测试响应

Create fake testing response for Google Maps API

我正在测试一些命中 Google 地图 API 的代码,当然,我实际上并不想命中他们的 API。基本上有两件事我想测试...

  1. 如果我传递一个有效地址,我会收到一个响应对象 latlng 属性。
  2. 如果我传递一个无效地址,我会收到 具有 error 属性的响应对象。

现在,当我击中他们的 API 时,测试正在运行,但正如我所说,我基本上想击中一个假的 API,所以我的测试不依赖于 Google' s API.

执行此操作并实际测试我的代码的好方法是什么?我不想为了通过考试而做某事。相反,我希望它是一个实际的测试。

这是我的一个测试用例,用于查找响应中的错误:

/** @test */
function an_error_attribute_is_returned_when_there_are_no_results()
{
    $origin = '';
    $destination = '';
    $request = new GetDistanceRequest($origin, $destination);

    $this->assertObjectHasAttribute('error', $request->receive());
}

您的应用程序与 google 地图之间的集成测试确实无可替代。

您可以轻松地对您的应用程序处理 google 地图在成功请求时返回的数据对象进行单元测试,并且您的代码可以处理来自 google 地图的错误响应。您可以复制从每个请求返回的响应,将其保存为文件,并将其作为固定装置提供给您的代码。这样做的问题是 google api 可能与您的测试数据不同步。你的测试可能通过了,然后当你去推送你的应用程序时,他们可能会改变他们的 api,你的应用程序将开始出错。

我可能会考虑的几件事是:

  • google 改变他们的 API 的可能性有多大?他们有这方面的历史吗,他们是否致力于正式的版本控制方案?
  • 是否可以获取一个测试帐户并保留您的两个集成测试。也许您的集成测试每天只有 运行 次?还是仅在主提交时?理想情况下,测试帐户将为您提供足够的配额,以便 运行 在每个构建和本地进行集成测试。
  • 是否可以保存周期性的 google 回复?说每12小时??您可以有一个后台服务,它点击 google 映射以获得成功响应和错误响应,并将其保存到静态文件存储中。然后你的测试可以在每个 运行 之前把它拉下来。我觉得这可能是 API 请求 limits/rate 限制和新鲜度之间的妥协。但是需要最多的工作。

如果可行,没有什么比尽可能多地针对实际服务进行测试更好的了。