自初始化假数据
2009年8月4日
使用测试替身的经典案例之一是调用远程服务。远程服务通常速度慢且不可靠,因此使用替身是使测试更快、更稳定的好方法。
当您查询远程服务时,需要找到一种方法将预期数据加载到您的替身中。一种方法是使用我称之为自初始化假数据的方法。基本计划很简单。第一次调用假数据时,它将调用传递到实际的远程服务,并在返回数据时获取并保存一份副本。进一步的调用只返回副本。从某种意义上说,这就像缓存,但有一个重要的区别,即没有尝试处理缓存失效,这很方便,因为这是两件难事之一。
我称之为假数据,因为这似乎最符合各种测试替身。另一个合理的替代方案是存根,但这里的区别在于存根需要在构建夹具时进行设置,而假数据是自主的。
自初始化假数据最有趣的地方在于如何处理远程服务更改其响应的情况。
有一次我看到这种方法是在由另一个应用程序控制的数据库中。在这种情况下,数据确实发生了变化,而且很频繁。这对测试不利,因为自动化测试依赖于对相同问题的相同答案。但通常测试并不关心数据是否是最新的,因此保存旧值就可以了。
我最近在与同事 Josh Price 聊天时再次遇到了这个问题。在他的情况下,远程数据应该是静态的,但偶尔会发生变化,这意味着他正在开发的系统需要更改 - 通常是处理格式问题。在这种情况下,他有一个特殊的测试套件,它会让所有自初始化假数据调用远程服务并检查它们是否返回与保存的值相同的值。
在这种情况下,他们构建管道的早期阶段针对假数据运行,最后一个(最慢)阶段针对服务本身运行。一个有趣的问题是,远程服务需要一些不重要的参数,这些参数在每次调用时都会发生变化,但不会改变结果。当假数据从存储中查找值时,这些参数会从 URL 中剥离。
(感谢 Josh Price、Darren Cotterill 和 Gerard Meszaros 对本文的帮助。)