如何安全地对Symfony 2中的写操作进行单元测试?

Hap*_*per 4 database tdd phpunit unit-testing symfony

我想为我的所有CRUD创建测试.但是如何为它们设置单独的数据库?这是最好的方式吗?

这是另一个问题,但它是相关的:我是否应该在生产服务器中运行测试?有时在不同的环境中事情会出错,所以我想我应该这样做.但后来我需要提到的单独的数据库,对吗?

有什么建议?

Mit*_*eat 10

在生产服务器上运行任何类型的测试通常都是一个坏主意(除非它只是尚未进行调整的生产硬件).

单元测试不会命中数据库(或任何其他外部系统).因此,为了创建单元测试,您需要删除对数据库的依赖性.

您称之为"单元测试"的可能是集成测试.利用外部系统(例如数据库,文件系统等)的任何测试都是集成测试.

您的问题的两个常见解决方案是:

  1. 在测试开始时,将包含已知数据的数据库备份还原到单独的测试数据库,然后针对它执行测试.

  2. 使用"固定"的已知测试数据库,在每个测试开始时启动一个事务,执行测试然后回滚事务以使数据库处于相同的已知状态.

(1号通常是优选的,因为(2)中的数据库可能变得"污染").