Testing WebTestCase不会自动加载@Route注释

Testing WebTestCase不会自动加载@Route注释,testing,symfony,annotations,routes,Testing,Symfony,Annotations,Routes,当使用WebTestCase类进行功能测试时,@Route注释不起作用 我的控制器如下所示: <?php namespace Foo\ShopBundle\Controller; use Foo\ShopBundle\Entity\Cart; use Foo\ShopBundle\Entity\ProductInterface; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\F

当使用
WebTestCase
类进行功能测试时,
@Route
注释不起作用

我的控制器如下所示:

<?php
namespace Foo\ShopBundle\Controller;

use Foo\ShopBundle\Entity\Cart;
use Foo\ShopBundle\Entity\ProductInterface;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
 * @Route("cart")
 */
class CartController extends Controller
{
    const CART_ID = 'cart_id';

    /**
     * @Route("/")
     * @Template()
     */
    public function indexAction()
    {
        return array('cart' => $this->getCart($this->getCurrentUserName(), $this->getCurrentSessionId()));
    }

    ...

?>
有没有办法解决这个问题?

尝试将它添加到setUp()方法中(别忘了定义$vendorDir)

尝试将其添加到setUp()方法中(不要忘记定义$vendorDir)


虽然这个问题已经很老了,但我想补充一点:

请确保在测试期间始终指向phpunit.xml(.dist)文件

这意味着:

# OK
phpunit -c app/ src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
会有用的

但是,在命令中删除
-c app
将中断测试运行程序,因为Symfony无法按其应该的方式启动:

# ERROR
phpunit src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
在后一种情况下,自动加载无法正常初始化,因此无法正确注册条令注释


设置方法中提到的“调整”不再需要

虽然这个问题很老,但我想补充一点:

请确保在测试期间始终指向phpunit.xml(.dist)文件

这意味着:

# OK
phpunit -c app/ src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
会有用的

但是,在命令中删除
-c app
将中断测试运行程序,因为Symfony无法按其应该的方式启动:

# ERROR
phpunit src/MyNamespace/Bundlee/MyBundle/Controller/MyControllerTest.php
在后一种情况下,自动加载无法正常初始化,因此无法正确注册条令注释


设置方法中提到的“调整”不再需要

检查phpunit.xml.dist文件。引导参数应该指向文件
/autoload.php
(假设该文件位于Symfony应用程序目录中)。
如果您的引导值为
。/vendor/autoload.php
则您没有注册“loadClass”。

请检查您的phpunit.xml.dist文件。引导参数应该指向文件
/autoload.php
(假设该文件位于Symfony应用程序目录中)。
如果您的引导值为
。/vendor/autoload.php
则您没有注册“loadClass”。

我遇到了相同的问题。事实证明,我的phpunit.xml中包含以下内容:

<phpunit backupGlobals="false"
         ...
         bootstrap="vendor/autoload.php">

bootstrap
的值更改为
app/bootstrap.php.cache
为我解决了这个问题。注释加载程序现在已正确注册

如果您查看一下,您将看到默认的Symfony应用程序也使用这个文件作为PHPUnit引导


请注意,我的phpunit.xml位于项目的根目录中,而不是
app
目录中。如果phpunit.xml文件位于
app
目录中,您可以简单地使用
bootstrap.php.cache
我遇到了相同的问题。事实证明,我的phpunit.xml中包含以下内容:

<phpunit backupGlobals="false"
         ...
         bootstrap="vendor/autoload.php">

bootstrap
的值更改为
app/bootstrap.php.cache
为我解决了这个问题。注释加载程序现在已正确注册

如果您查看一下,您将看到默认的Symfony应用程序也使用这个文件作为PHPUnit引导


请注意,我的phpunit.xml位于项目的根目录中,而不是
app
目录中。如果phpunit.xml文件位于
app
目录中,您可以简单地使用
bootstrap.php.cache

,但是我很好奇为什么需要这样做。WebTestCase正在引导整个AppKernel。由于应用程序在浏览器中运行良好,我希望这里不会有任何差异。我也有同样的问题,我不知道为什么注释在测试环境和浏览器中都不起作用。所以我找到了这个解决方法。但是我很好奇为什么这是必要的。WebTestCase正在引导整个AppKernel。由于应用程序在浏览器中运行良好,我希望这里不会有任何差异。我也有同样的问题,我不知道为什么注释在测试环境和浏览器中都不起作用。因此,我们找到了这个解决方法。