У меня есть тестовое приложение, которое мы обновили с symfony 2.3 до 2.6. Мы следовали всем документам по обновлению и должны были изменить только некоторые мелочи.
Все работает отлично, кроме тестов PHPUnit.
У нас есть 2 отдельных прогона, один только для тестирования классов сущностей, который запускается на ловушке перед фиксацией. и второй, который управляет полным набором, с настройками базы данных и целыми девятью ярдами.
Теперь, после обновления до 2.6, PHPUnit_Framework_Error
брошенные в юнит-тесты были заменены Symfony’s Symfony\Component\Debug\Exception\ContextErrorException
, это проваливает все тесты, как это:
/**
* @dataProvider objectTestDataProvider
* @expectedException \PHPUnit_Framework_Error
*/
public function testCanNotSetClientToArbitraryValue($value)
Теперь я не хочу менять это на новое Исключение, так как запуск набора тестов только для сущностей не зависит от компонентов Symfony, поэтому Symfony не загружается, поэтому ошибки являются обычными PHPUnit_Framework_Error
поэтому изменение делает эти тесты неудачными.
Другими словами, когда я запускаю один тестовый класс, он работает, после запуска зависимого от Symfony теста он завершается неудачно:
# runs perfectly
phpunit -c app/phpunit.xml --debug src/My/Bundle/Tests/Entity
# fails when reaching the tests that ran perfectly in previous command
phpunit -c app/phpunit.xml --debug
Этот новый ErrorHandler кажется недокументированным, я не мог найти много об этом в Google, за исключением запроса на получение и эта небольшая статья
Я пробовал:
SYMFONY_DEBUG=0
переменная окружения, но это, похоже, не имеет никакого значения.debug.error_handler.throw_at: 0
параметр моего test_config.ymlредактировать:
По запросу @cerad я попытался выделить тесты, чтобы попытаться воспроизвести код с как можно меньшим, мне удалось воспроизвести с помощью 4 тестов:
class MyControllerTest extends WebTestCase
{
public function testRoutesLoaded_1()
{
$client = self::createClient();
/** @var Router $router */
$router = $client->getKernel()->getContainer()->get('router');
$this->assertEquals('/menu', $router->generate('front_menu'));
}
/**
* @expectedException \PHPUnit_Framework_Error
*/
public function testCreateOrder_1()
{
new Order(); // required parameter missing
}
public function testRoutesLoaded_2()
{
$client = $this->createNewFrontClient();
/** @var Router $router */
$router = $client->getKernel()->getContainer()->get('router');
$this->assertEquals('/menu', $router->generate('front_menu'));
}
/**
* @expectedException \PHPUnit_Framework_Error
*/
public function testCreateOrder_2()
{
new Order(); // required parameter missing
}
}
Как видите, я просто дважды выполняю один и тот же тест, но последний из них приводит к ошибке:
MyControllerTest :: testCreateOrder_2
Не удалось подтвердить, что исключение типа «Symfony \ Component \ Debug \ Exception \ ContextErrorException» соответствует ожидаемому исключению «\ PHPUnit_Framework_Error»
Поскольку я не получил никаких ответов здесь, я разместил вопрос о GitHub Symfony в и они подтвердили, что это было неправильное поведение.
Проблема была решена и является слился в 2.6-дев.
Других решений пока нет …