php - Symfony2 中数据库测试的实践?如何隔离?

标签 php unit-testing symfony

当前测试与 Symfony2 的数据库交互的最佳实践是什么?我有一个简单的 CRUD 设置,我想确保我的测试没问题。现在,我有 4 个测试,每个测试都确保创建、更新、删除和列出操作正常发生。

我的测试用例有两个神奇的方法,__construct 和 __destruct。在它们内部,我使用“php app/console ...”调用 exec() 以创建数据库、创建模式,然后删除数据库。然而,这太慢了,当我有多个测试用例时,它总是会发生。

当涉及到数据库测试和隔离此类测试时,我应该如何进行?

最佳答案

我认为最好始终从头开始,以确保测试完全隔离。为此,我只需在每次测试之前构建数据库结构,然后用给定测试所需的固定装置填充它。

请注意,我仅构建所需的数据库表,并且仅插入所需的装置。它比加载大型数据库转储要快一些。它也更干净,因为测试不共享固定装置(这使得它们更容易维护)。

我有一个名为 KernelAwareTest 的基本测试用例类,它可以帮助我构建架构。您可以在要点上找到它:https://gist.github.com/1319290

setUp() 启动 Symfony 内核并将对其的引用存储在类属性中(以及对 DIC 和实体管理器的引用)。此外,还调用generateSchema()来生成数据库模式(它使用 Doctrine 中的模式工具)。

默认情况下,它为实体管理器已知的所有实体生成数据库结构。您可以通过重写 getMetadatas() 方法在测试类中更改此行为。

P.S.:我尝试使用内存数据库(sqlite),但它并不完美。无论如何,最好对您在生产中使用的数据库运行测试。

关于php - Symfony2 中数据库测试的实践?如何隔离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457247/

相关文章:

javascript - RPG - 为半复杂树结构存储玩家数据

php - $_SERVER ['DOCUMENT_ROOT' ] 在末尾创建额外的斜杠

php - 单元测试函数 php

Symfony2 Doctrine 多对多关系与两个拥有方和 Doctrine cmd 行工具

security - 注销后如何使用不同的目标路径?

php - 如何在模型类中读取 Symfony2 中的配置值

php - 通过 Xdebug 禁用 HTML 堆栈跟踪

php - 确定functions.php [wpml]中的语言

c# - 使用 Moq 模拟事件(基于事件的异步模式) - 如何对 UT 中的事件使用react?

java - 用于 Windows 上单元测试的嵌入式 FTP 服务器 : FileUpload 551 error