上下文如下,我们有一个 MVC Web 应用程序,数据库中有很多遗留代码。(我们不允许将此代码迁移到服务器端)对于我们的持久性存储,我们使用存储库模式。
我们的客户想要向应用程序添加新功能,因此我们显然在服务器端添加了所有新业务逻辑。
我们现在遇到的问题是关于我们的功能测试套件,它每天运行的速度越来越慢。
主要原因是我们使用 selenium 从浏览器运行测试到数据库(端到端)。
我想知道人们是否成功地使用了以下其他策略:
1.摆脱用户界面
在控制器级别运行测试,而不必通过浏览器和 Web 服务器。为了弥补通过 UI 进行测试的损失,我们将编写 javascript 单元测试或 MVC 视图单元测试。
2.摆脱数据库
编写我们存储库的“InMemory”版本,以便应用程序可以完全在内存中运行,这也应该加快测试套件的速度,因为我们不会撞到磁盘和更少的网络。作为补偿,我们将为我们的数据库存储库编写集成测试。
我认为同时执行1+2 策略会产生最大的执行速度,我们将测试真正重要的东西(控制器、业务层、域实体和各种帮助程序作为一个整体)(我认为 UI 和数据库是“细节” ”)。
现在,问题在于,事实上,由于数据库有很多遗留代码,我不知道仅仅依赖于这些东西的集成测试并将数据库排除在功能测试套件之外是否足够安全。我应该把它留在套房里吗?还是很好?
任何经验或建议将不胜感激!
我的一些发现如下:
- 持续交付书建议这些测试应该始终是端到端的,即使它们很慢(尽管他们也说不是每个人都会同意这一点)
- 据我了解,鲍勃叔叔会同意 1+2 策略,但我不确定他是否会认为使用带有遗留代码的数据库。