【发布时间】:2013-05-29 08:16:58
【问题描述】:
我们有大约 180 个单元测试实现 webtestcase 类,并且测试在控制器上运行。
但是,当我们运行单元测试时,它们打开了太多与 db 的连接。由于在第 120 次测试后有太多的活动 tcp 连接测试失败。测试运行时所有连接都处于活动状态。
在tearDown函数中我们调用了实体管理器的close函数,但是什么都没有,没有任何影响。我认为有一些类保持连接对象引用。
因为在 php 手册中提到当对象分配为 null 时 pdo 连接关闭。我们也这样做,但没有改变。 P.S:我们的单元测试是功能测试。在控制器上工作并与数据库集成,没有模拟对象
我们的错误在哪里?我们该如何解决这个问题?
这是我在 config_test.yml 中的连接参数
imports:
- { resource: config_dev.yml }
framework:
test: ~
session:
storage_id: session.storage.mock_file
web_profiler:
toolbar: false
intercept_redirects: false
doctrine:
dbal:
driver: pdo_mysql
port: 3306
host: localhost
dbname: mydb
user: myuser
password: mypass
charset: UTF8
【问题讨论】:
-
我们可以看看您是如何在 config.yml 文件和/或 parameters.yml 中定义连接的吗?
-
@j0k 我添加到问题中
-
前段时间我也遇到过类似的问题。问题是由于未完成的交易而发生的。您是否使用显式事务(我的意思是开始提交/回滚)?如果是这样,请确保您始终完成它。
-
嗯,我还有一个猜测。你如何关闭这些连接?您是否从客户那里关闭实体经理?如果你不这样做 - 你应该从客户端关闭实体管理器: $this->client->getContainer()->get('doctrine.orm.entity_manager')->close();
-
@Cyprian 我没有交易。如果默认情况下学说使用事务性,那么我不知道。是的,我按照你说的关闭了连接。
标签: symfony doctrine-orm connection phpunit