这个问题已经很老了,但今天仍然有效,所以这是我的经验以及我今天在 Symfony 项目中如何处理它。
我开始使用 SQLite 内存数据库进行测试,并在每个测试用例之前重建 db 模式 + 插入的固定装置。这有两个主要缺点:
- 还是太慢了:(
- 在开发和产品上,我使用了 Mysql,这很快就成了一个问题,因为 SQLite 根本没有所需的所有功能,有时表现不同
使用 MSQL 进行测试并在每次测试之前重建模式 + 插入固定装置太慢了。所以我一直在寻找替代品...
我偶然发现了这篇博文: http: //alexandre-salome.fr/blog/Symfony2-Isolation-Of-Tests
这里的人建议在活动数据库事务中运行测试,并在每次测试后简单地回滚任何更改。
我接受了这个想法并为它创建了一个包:https ://github.com/dmaicher/doctrine-test-bundle
捆绑包的设置非常简单,不需要更改任何现有的 php 测试类。在内部,它更改了学说配置以使用自定义数据库连接 + 驱动程序。
使用这个包,您可以在运行整个测试套件之前简单地创建数据库模式 + 插入固定装置(我更喜欢在自定义 phpunit 引导文件中执行此操作)。使用 phpunit 侦听器,所有测试都将在数据库事务中运行。
我已经使用这个包已经有一段时间了,对我来说,使用 SQLite、MySQL 或 PostgreSQL 可以完美地工作。
一段时间以来,它也用于 symfony-demo 项目。