我们公司正在使用一个实际上处于beta状态的外部API。这意味着它还不稳定,它每周左右都会更改请求/响应。
我想编写测试以确保我的代码正常工作。单元测试已经为我自己的代码完成了。但是API本身没有经过测试,因为它违反了第一条规则(快速测试)。如果我测试API请求/响应'live‘(它们有一个API的沙箱版本),测试本身大约需要7秒。那是很长的一段时间。
在这种情况下,我如何确定API对请求和响应仍然使用相同的结构,这是慢速测试正常的特例吗?显然,我的层次结构希望尽快使用这个API,而且我不想要任何bug。
发布于 2016-09-22 21:01:33
我想编写测试以确保我的代码正常工作。单元测试已经为我自己的代码完成了。但是API本身没有经过测试,因为它违反了第一条规则(快速测试)。如果我测试API请求/响应'live‘(它们有一个API的沙箱版本),测试本身大约需要7秒。那是很长的一段时间。
我完全同意将7秒添加到单元测试并不理想,但即使是7微秒,您也不应该在代码中使用单元测试来测试API。您不需要每次对代码进行更改时都测试API --即使您在一个月内不对代码进行更改,也需要测试它:每次更改代码时都需要测试它。
当然,您不知道他们多久这样做一次,所以我建议每小时/天/周自动运行一次测试,这取决于您期望更改的频率。
当然,真正进行这些测试是否是个好主意还有待商榷。就我个人而言,我认为进行一些明智的检查是有意义的,尤其是对于不稳定的服务,在这种服务中,有人可能会在不更改补丁版本的情况下进行更改,然后您必须进行数小时的调查,直到您意识到这一点--但我回避了:即使假设了最佳实践,您也可能误解了API,而如果更改不会影响到它的正常使用,就会破坏您的代码。
发布于 2016-09-21 13:13:30
老实说,您正在调用的API应该有一个版本控制方案。IE,我在过去使用过的一个API是格式化的http://clientaddress.com/v1/endpoints,但是他们正在用一个住在http://clientaddress.com/v2/endpoints上的v2进行测试。虽然我们希望尽快使用新的API,但我们只能在v1 (稳定版本)上进行测试,以确保一切正常运行。也就是说,我们经历了重载方法/调用/任何东西来接受来自v2 api的新对象的麻烦,然后使用这些对象调用v1格式的方法。通过这种方式,我们能够测试一个“不完整”的产品,确保我们的逻辑是正确的。
另一种选择,尽管有点“作弊”,因为(我认为?)您永远不希望使用called进行测试,而是在本地创建一个虚拟API,该API返回一个或多个预先设置的对象,其格式是您希望从客户端API中获得的格式,并且当您想要与客户端API对话时,这个方法将被调用。这样,您就可以证明您的代码适用于假对象,并且当您准备好使用最终形式的客户端api进行测试时,您可以修改这一方法,使其以最小的工作量进入真实的对象。
https://softwareengineering.stackexchange.com/questions/331600
复制相似问题