4

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

我们有 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 似乎没有记录,除了拉取请求和这篇小文章外,我在谷歌中找不到太多关于它的信息

我试过了:

  • 设置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

1 回答 1

5

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

该问题已解决并合并到 2.6-dev中。

于 2014-11-03T14:36:58.743 回答