Ale*_*ret 6 php doctrine zend-framework doctrine-orm zend-framework2
对于ZF3和Doctrine的PHPUnit测试,我面临着"连接太多"的问题,因为我每次执行PHPUnit时都会执行~200次测试.我已经发现了一些关于堆栈溢出的问题和答案,但没有这些工作.
我的设置:ZF2/ZF3,Doctrine 2和PHPUnit.
我有一个基础测试类用于所有测试,setUp和tearDown函数如下所示:
public function setUp()
{
$this->setApplicationConfig(Bootstrap::getConfig());
Bootstrap::loadAllFixtures();
if (!static::$em) {
echo "init em";
static::$em = Bootstrap::getEntityManager();
}
parent::setUp();
....
}
public function tearDown()
{
parent::tearDown();
static::$em->flush();
static::$em->clear();
static::$em->getConnection()->close();
$refl = new \ReflectionObject($this);
foreach ($refl->getProperties() as $prop) {
if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
$prop->setAccessible(true);
$prop->setValue($this, null);
}
}
gc_collect_cycles();
}
public static function (Bootstrap::)loadAllFixtures()
{
static::$em->getConnection()->executeUpdate("SET foreign_key_checks = 0;");
$loader = new Loader();
foreach (self::$config['data-fixture'] as $fixtureDir) {
$loader->loadFromDirectory($fixtureDir);
}
$purger = new ORMPurger(static::$em);
$executor = new ORMExecutor(static::$em, $purger);
$executor->execute($loader->getFixtures());
$executor = null;
$purger = null;
static::$em->getConnection()->executeUpdate("SET foreign_key_checks = 1;");
static::$em->flush();
static::$em->clear();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用innotop监视我的本地MySQL服务器,并且连接数量正在增加.
你有什么想法我错过了吗?
谢谢你,亚历山大
更新14.02.2017:我已经更改了要使用的功能static::$em并添加了Bootstrap::loadAllFixtures方法.
如果我添加static::$em->close()到tearDown方法,则所有后续测试都会失败,并显示"EntityManager已关闭"等消息.echo "init em";只调用一次并显示第一次测试.是否有可能检查我的应用程序是否打开连接而不关闭它们?我的测试用例基于AbstractHttpControllerTestCase
您的tearDown 方法看起来应该可以解决问题。我只是这样做,从未遇到过这个问题
protected function tearDown()
{
parent::tearDown();
$this->em->close();
$this->em = null;
}
Run Code Online (Sandbox Code Playgroud)
Bootstrap::loadAllFixtures 方法有什么作用?那里是否有任何可能被忽略的数据库连接?
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |