Symfony 2.6覆盖PHPUnit_框架_错误

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

我有一个经过单元测试的应用程序,我们已经从symfony 2.3更新到2.6。我们跟踪了所有的升级文档,只需更改一些次要的内容。 除了PHPUnit测试外,一切都正常工作

我们有两个单独的运行,一个只用于测试实体类,它是在预提交挂钩上启动的。第二个是全套的,有数据库设置和整个九码

现在,自从升级到2.6之后,单元测试中抛出的
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
    环境变量,但这似乎没有任何区别
  • debug.error\u handler.throw\u at:0
    参数添加到我的test\u 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
    }
}
正如您所看到的,我只运行了相同的精确测试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
首先读取缓存。