Symfony 2.6 переопределяет PHPUnit_Framework_Error

У меня есть тестовое приложение, которое мы обновили с 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»

4

Решение

Поскольку я не получил никаких ответов здесь, я разместил вопрос о GitHub Symfony в и они подтвердили, что это было неправильное поведение.

Проблема была решена и является слился в 2.6-дев.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]