Symfony 2.6覆盖PHPUnit_框架_错误
我有一个经过单元测试的应用程序,我们已经从symfony 2.3更新到2.6。我们跟踪了所有的升级文档,只需更改一些次要的内容。 除了PHPUnit测试外,一切都正常工作 我们有两个单独的运行,一个只用于测试实体类,它是在预提交挂钩上启动的。第二个是全套的,有数据库设置和整个九码 现在,自从升级到2.6之后,单元测试中抛出的Symfony 2.6覆盖PHPUnit_框架_错误,php,unit-testing,symfony,phpunit,symfony-2.6,Php,Unit Testing,Symfony,Phpunit,Symfony 2.6,我有一个经过单元测试的应用程序,我们已经从symfony 2.3更新到2.6。我们跟踪了所有的升级文档,只需更改一些次要的内容。 除了PHPUnit测试外,一切都正常工作 我们有两个单独的运行,一个只用于测试实体类,它是在预提交挂钩上启动的。第二个是全套的,有数据库设置和整个九码 现在,自从升级到2.6之后,单元测试中抛出的PHPUnit\u Framework\u错误已被Symfony的Symfony\Component\Debug\Exception\ContextErrorExceptio
PHPUnit\u Framework\u错误
已被Symfony的Symfony\Component\Debug\Exception\ContextErrorException
所取代,这会使所有测试失败,例如:
/**
* @dataProvider objectTestDataProvider
* @expectedException \PHPUnit_Framework_Error
*/
public function testCanNotSetClientToArbitraryValue($value)
现在我不想将其更改为新的异常,因为运行仅实体测试套件不依赖于symfony组件,因此symfony没有加载,因此错误是常规的PHPUnit\u Framework\u错误
,因此更改它会使这些测试失败
换句话说,当我运行一个测试类时,它可以工作,一旦运行了一个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似乎没有文档记录,除了pull请求和
我试过:
- 设置
环境变量,但这似乎没有任何区别SYMFONY\u DEBUG=0
- 将
参数添加到我的test\u config.ymldebug.error\u handler.throw\u at:0
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
}
}
正如您所看到的,我只运行了相同的精确测试2次,但最后一次仍然会导致错误:
MyControllerTest::testCreateOrder_2
断言类型为“Symfony\Component\Debug\exception\ContextErrorException”的异常与预期异常“\PHPUnit\u Framework\u Error”匹配失败
由于我在这里没有收到任何回复,我发布了一条消息,他们确认这是不正确的行为
问题已经解决。是否可以将此行为隔离到一个合理的小单元测试中?是的,我有一个测试加载symfony,并检查路由是否存在,还有一个测试抛出错误。如果首先执行第一个测试,则第二个测试失败,覆盖PHPUnit错误handlerOk。如果第一次测试是先执行的,我不理解第二次测试失败的部分。无论如何,你能发布一些代码吗?我不能说我做了大量的测试,但是我做过的那些测试,在2.3到2.5的升级中幸存了下来。为了澄清一下,我们在讨论2.5.6?或者您正在使用2.6.0-dev?我们在composer中使用2.6.*。我曾尝试在简单的测试中隔离它,但它的工作原理与预期一样,所以我猜它在其他地方出了问题……我有一个测试用例来重现这一点,只有4个测试,请参阅更新的问题。我有一个通知,如果您遇到此问题并更新了Symfony,您将不得不手动清除缓存(
rm-rf app/cache/*
)为了让应用程序正常工作。这是因为缓存了不正确的行为,cache:clear
首先读取缓存。