我们目前正在使用针对数据库运行的测试来练习测试驱动开发。此数据库在开发人员计算机上本地运行,但在架构或数据更改时,它们都会同步到主数据库。
这已持续了几年,现在我们发现随着新功能添加到产品中,数据变得非常陈旧。
通过GUI将数据添加到测试数据库已变得“不可能”,因为简单的更改可能会破坏数百个测试 - 我们在编写不那么脆弱的测试方面做得更好,但是马现在已经疯狂了。
我们可以使用哪种策略来管理此问题?
我们考虑过复制一个生产数据库,然后开始编写任何新的测试。我可以看到问题在一段时间内反复出现,这会增加我们代码库的混乱。
答案 0 :(得分:1)
我个人不认为需要外部资源的测试(例如数据库,jms队列,其他服务等)是单元测试。我将它们称为“集成测试”。
话虽如此,有时需要围绕一个OR层构建一套单元测试。当数据库包含表示不同方案的数据时,您可能希望测试代码的行为方式,其中一些方案可能在开发数据库中不易获得。我发现最有用的是让我的单元测试构建一个内存数据库(例如使用H2)并使用不同测试所需的不同数据集加载它。使用Hibernate这很容易,您可以根据关系映射文件创建模式。然后,您只需在其中插入测试用例所需的数据。这很好,因为:
答案 1 :(得分:0)
我不确定这对你是否有用......当我遇到这个时,我开发了一个“确保......”的库。 检查数据库中特定对象状态的方法,如果不是,则强制它处于该状态。每个测试都负责设置“确保”所需的一切都在那里。
此外,每个测试都没有检查一些全局方面,因为它们需要很长时间而且不会被测试修改 - 它们通常是在自动套件运行开始时设置的,并且通常不用于单独的测试运行。如果单个测试因为看起来可能属于此设置的问题而中断,我只需手动运行。
这不是我有一天决定做的事,而是做了一切。我慢慢地修复了测试,因为我不得不对它们进行处理 - 通常是因为它们因为你所描述的那种问题而破坏了。 “确保...”库也是逐步开发的 - 在需要之前没有任何内容。
希望这有帮助!