У меня есть проект с большим количеством тестов, таких как
class MyTest extends BaseTestCase
{
public function __construct()
{
parent::__construct();
$this->em = $this->get('doctrine')->getManager();
}
public function setUp() {
$this->init();
//load sql data for the tests
$path = $this->get('kernel')->locateResource('@Bundle/Data/Test.sql');
$content_file_sql_data = file_get_contents($path);
$stmt = $this->em->getConnection()->prepare($content_file_sql_data);
$stmt->execute();
$stmt->closeCursor();
}
/*
* Then we do a lot of tests using the database
*/
}
Все они расширяют мой BaseTestCase:
abstract class BaseTestCase extends \PHPUnit_Framework_TestCase {
protected $_container;
protected $kernel;
public function __construct() {
parent::__construct();
$this->kernel = new \AppKernel("test", true);
$this->kernel->boot();
$this->_container = $this->kernel->getContainer();
$this->init();
}
//empty the database before each test class
public function init() {
$this->_application = new Application($this->kernel);
$this->_application->setAutoExit(false);
//rebuild and empty the database
$this->runConsole("doctrine:schema:drop", array("--force" => true));
$this->runConsole("doctrine:schema:create");
}
Так как у меня много тестов, я недавно получил несколько ошибок PDOException: SQLSTATE[08004] [1040] Too many connections
. Это похоже на то, что phpunit никогда не закрывает соединение с базой данных, и около 100 тестов я получаю эту ошибку для всех других тестов.
Как я могу это исправить?
Я попытался поставить последний тест, выполняющий $this->em->close()
в конце каждого тестового класса, но это не решило его.
Некоторая дополнительная информация: я почти уверен, что у меня нет проблем с ОДНИМ тестом, потому что, если я изменю порядок набора тестов, ошибка появится примерно на том же количестве пройденных классов тестов.