Symfony 无法扩展控制器测试类

Symfony 无法扩展控制器测试类,symfony,phpunit,Symfony,Phpunit,我有一个基类要通过控制器测试进行扩展: //Base.php namespace AppBundle\Tests\System; abstract class Base extends \PHPUnit_Framework_TestCase { ... } 但当我尝试扩展它时: //DefaultControllerTest.php namespace AppBundle\Tests\Controller; use AppBundle\Tests\System\Base; cla

我有一个基类要通过控制器测试进行扩展:

//Base.php
namespace AppBundle\Tests\System;

abstract class Base extends \PHPUnit_Framework_TestCase
{
    ...
}
但当我尝试扩展它时:

//DefaultControllerTest.php
namespace AppBundle\Tests\Controller;

use AppBundle\Tests\System\Base;

class DefaultControllerTest extends Base
{
    ...
}
我得到这个错误:

/usr/bin/php/tmp/ide-phpunit.php--configuration/server/project/phpunit.xml/server/project/src/AppBundle/Tests 测试在18:36开始。。。 PHP致命错误:在第7行的/server/project/src/AppBundle/Tests/Controller/DefaultControllerTest.PHP中找不到类'AppBundle\Tests\System\Base'

进程已完成,退出代码为255

PhpStorm正在检测
DefaultController.php
中的
Base
类,因此它似乎不是打字错误

这是我的
phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "app/bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Tests">
            <directory>src/AppBundle/Tests</directory>
        </testsuite>
    </testsuites>

    <php>
        <server name="KERNEL_DIR" value="app" />
    </php>

    <groups>
        <exclude>
            <group>slow</group>
        </exclude>
    </groups>

    <!-- This is for code coverage -->
    <filter>
        <whitelist>
            <directory>app</directory>
            <directory>src</directory>

            <exclude>
                <directory>app/cache/*</directory>

                <file>app/check.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>
bootstrap                   = "web/app_test.php" >

src/AppBundle/Tests
缓慢的
应用程序
src
应用程序/缓存/*
app/check.php

知道我遗漏了什么吗?

正如@malcolm和@Ilya Yarkovets所建议的,我需要包括测试自动加载器。因此,我在
web
目录中创建了一个
app_test.php
文件,配置如下:

并在
phpunit.xml
中更改了这一行:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "app/bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Tests">
            <directory>src/AppBundle/Tests</directory>
        </testsuite>
    </testsuites>

    <php>
        <server name="KERNEL_DIR" value="app" />
    </php>

    <groups>
        <exclude>
            <group>slow</group>
        </exclude>
    </groups>

    <!-- This is for code coverage -->
    <filter>
        <whitelist>
            <directory>app</directory>
            <directory>src</directory>

            <exclude>
                <directory>app/cache/*</directory>

                <file>app/check.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>
bootstrap                   = "web/app_test.php" >

我还不确定是否应该修改
app_test.php
,但现在似乎可以正常工作。

正如@malcolm和@Ilya Yarkovets所建议的,我需要包括测试自动加载程序。因此,我在
web
目录中创建了一个
app_test.php
文件,配置如下:

并在
phpunit.xml
中更改了这一行:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
        colors                      = "true"
        convertErrorsToExceptions   = "true"
        convertNoticesToExceptions  = "true"
        convertWarningsToExceptions = "true"
        processIsolation            = "false"
        stopOnFailure               = "false"
        syntaxCheck                 = "false"
        bootstrap                   = "app/bootstrap.php.cache" >

    <testsuites>
        <testsuite name="Tests">
            <directory>src/AppBundle/Tests</directory>
        </testsuite>
    </testsuites>

    <php>
        <server name="KERNEL_DIR" value="app" />
    </php>

    <groups>
        <exclude>
            <group>slow</group>
        </exclude>
    </groups>

    <!-- This is for code coverage -->
    <filter>
        <whitelist>
            <directory>app</directory>
            <directory>src</directory>

            <exclude>
                <directory>app/cache/*</directory>

                <file>app/check.php</file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>
bootstrap                   = "web/app_test.php" >

我还不确定是否应该修改
app\u test.php
,但现在似乎工作正常。

我相信您可以直接告诉phpunit使用composer autoloader:

bootstrap="app/autoload.php"
而不是
“web/app\u test.php”


这是针对Symfony>=2.8的,对于以前的版本,我认为应该是
“vendor/autoload.php”

我相信您可以直接告诉phpunit使用composer autoloader:

bootstrap="app/autoload.php"
而不是
“web/app\u test.php”


这是针对Symfony>=2.8的,对于以前的版本,我认为应该是
“vendor/autoload.php”

php我认为不要使用composer autoloader。PHPStorm检测到的
Base
类只与PHPStorm:)相关。运行测试时,您的
DefaultControllerTest
类对
Base
类一无所知。你需要某种自动加载器/内核来为你加载它。谢谢@malcolm给我线索。还有你,@Ilya Yarkovetsphpunit我想你不使用composer自动加载器。PHPStorm检测到的
Base
类只与PHPStorm:)有关。运行测试时,您的
DefaultControllerTest
类对
Base
类一无所知。你需要某种自动加载器/内核来为你加载。谢谢@malcolm给我线索。还有你,@Ilya Yarkovets