2014-10-26 49 views
4

我有一个单元测试的应用程序,我们已经从symfony 2.3更新到2.6。我们遵循所有升级文档,只能更改一些小的内容。 除了PHPUnit测试外,一切工作都很完美。Symfony 2.6重写PHPUnit_Framework_Error

我们有2个独立运行,一个用于测试实体类,它是在预提交钩子上触发的。第二个运行全套设备,数据库设置和整个九码。

现在,因为升级到2.6,在单元测试抛出的PHPUnit_Framework_Error已被取代的Symfony的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似乎没有证件,我无法找到太多关于它的谷歌除对于拉入请求和this small article

我已经试过:

  • 设置SYMFONY_DEBUG=0环境变量,但这似乎没有做任何DIF ference。
  • 添加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 
    } 
} 

正如你所看到的,我只是运行相同的精确检验2次,但还是最后一个导致错误:

MyControllerTest::testCreateOrder_2 Failed asserting that exception of type "Symfony\Component\Debug\Exception\ContextErrorException" matches expected exception "\PHPUnit_Framework_Error"

+0

是否有可能将此行为隔离为一个合理的小单元测试? – Cerad 2014-10-26 15:10:58

+0

是的,我有一个测试加载symfony,并检查路由是否存在,以及第二个测试是否引发错误。如果第一个执行第一个,则第二个测试失败,覆盖PHPUnit错误处理程序 – NDM 2014-10-26 15:17:35

+0

Ok。我不明白第二个测试失败的部分,如果第一个测试是先执行的。无论如何,你可以发布一些代码吗?我不能声称有广泛的测试,但我确实有这些测试,在2.3到2.5的升级中幸免于难。只是为了澄清,我们正在谈论2.5.6?还是你使用2.6.0-dev? – Cerad 2014-10-26 15:24:46

回答

5

由于我没有得到任何答复,我发布了issue on Symfony's github,他们证实这是不正确的行为。

问题已解决,并且是merged in 2.6-dev

+2

我有一个通知,如果你遇到了这个问题并且更新了Symfony,你将不得不手动清除缓存('''rm -rf app/cache/*''')以使应用程序工作。这是因为不正确的行为被缓存,并且'''cache:clear'''首先读取缓存。 – ScayTrase 2014-11-18 06:45:15