Я сузил свою проблему до одного модульного теста, который включает довольно чистый запрос dbal. Запрос включает вложенные наборы, и сбой происходит, когда я перехожу с 3 на 4 уровня иерархических категорий. Очень мало изменений с точки зрения времени выполнения. И функциональность, с которой я работаю, не вызывает проблем на 10 уровне. Однако в PhpUnit, когда я запускаю тест с 4 или более уровнями, я получаю фатальную ошибку.
*Подводя итог, можно сказать, что запрос, который может занять на долю секунды больше, чем обычно, ИЛИ чуть больше ресурсов, приносит мне php fatal error
из PHPUnit
*
И ошибка выглядит так:
Неустранимая ошибка: вызов неопределенного метода Monolog\Formatter\LineFormatter::stopEvent() в /var/www/my-app/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Debug/Stopwatch.php в строке 92
Кто-то здесь столкнулся с фатальной ошибкой phpUnit в строке 92 как Что ж. Может ли это быть связано??
Я перечислил некоторые причудливые способы (ниже), чтобы обойти мою проблему, но я все же хотел бы знать, почему такой простой тест вызывает эту проблему.
- Запустите PhpUnit с параметром
processIsolation
равным «true». - Не обращайтесь к
static::createClient();
в методе setUpBeforeClass()
У меня был уважаемый член #symfony (Stof), который предположил, что это похоже на то, что я неправильно ввожу @logger в службу... но я подтвердил, что это не похоже на то, взяв службу регистратора ни в одной из моих услуг.
Может быть, эта проблема как-то связана с тайм-аутом? (Ошибка упоминает stopevent
и stopwatch
). Или, может быть, эта ошибка как-то связана с доступом к $client = static::createClient();
в setUpBeforeClass()
.. а затем доступ снова в предыдущих тестах.. В любом случае.. это сбивает меня с толку и, насколько я могу судить, все остальное в моей установке Symfony2 (2.1.1) работает отлично.
* LINE 92 файла Stopwatch.php .. исходный файл github здесь *
/**
* Stops an event.
* @param string $name The event name
* @return StopwatchEvent A StopwatchEvent instance
*/
public function stop($name)
{ return end($this->activeSections)->stopEvent($name);}