Symfony 2.6重写PHPUnit_Framework_Error

NDM*_*NDM 4 php phpunit unit-testing symfony symfony-2.6

我有一个单元测试的应用程序,我们已经从symfony 2.3更新到2.6.我们遵循了所有升级文档,只能改变一些小问题.除了PHPUnit测试之外,一切都运行良好.

我们有两个单独的运行,一个用于仅测试实体类,这是在预提交钩子上触发的.第二个运行整个套件,数据库设置和整个九码.

现在自升级到2.6以来,PHPUnit_Framework_Error单元测试中的抛出已经被Symfony取代了Symfony\Component\Debug\Exception\ContextErrorException,这样的所有测试都失败了:

/**
 * @dataProvider objectTestDataProvider
 * @expectedException \PHPUnit_Framework_Error
 */
public function testCanNotSetClientToArbitraryValue($value)
Run Code Online (Sandbox Code Playgroud)

现在我不想将其更改为新的Exception,因为运行仅实体的测试套件不依赖于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
Run Code Online (Sandbox Code Playgroud)

这个新的ErrorHandler似乎没有文档,除了pull请求和这篇小文章我在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
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只运行了相同的测试2次,但最后一次仍会导致错误:

MyControllerTest :: testCreateOrder_2无法断言"Symfony\Component\Debug\Exception\ContextErrorException"类型的异常匹配预期的异常"\ PHPUnit_Framework_Error"

NDM*_*NDM 5

由于我没有在这里得到任何回复,我在Symfony的github上发布了一个问题,他们证实这是不正确的行为.

问题已解决,并在2.6-dev中合并.

  • 我有一个通知,如果你遇到这个问题并更新了Symfony,你必须手动清除缓存(``rm -rf app/cache/*```)以使应用程序正常工作.这是因为缓存了不正确的行为,并且```cache:clear```首先读取缓存. (2认同)