@1alexandr

Проблема с phpunit. Как наследовать класс?

Хочу вынести код в отдельный класс и наследовать его другими классами...Запуская тесты получаю фатал:
PHP Fatal error:  Class 'App\Bundle\CoreBundle\Tests\Repository\DoctrineTestCase' not found in /home/user/desktop/app/tests/AppCoreBundle/Repository/CategoryRepositoryTest.php on line 8

Если ничего никуда не выносить - все работает. Подскажите пожалуйста где и что я делаю не так.
namespace App\Bundle\CoreBundle\Tests\Repository;

use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class DoctrineTestCase extends KernelTestCase 
{
    /**
     * @var EntityManager
     */
    protected $em;

    protected function setUp()
    {
        self::bootKernel();

        $this->em = static::$kernel->getContainer()
            ->get('doctrine')
            ->getManager();
    }

    protected function tearDown()
    {
        parent::tearDown();

        $this->em->close();
        $this->em = null;
    }
...
}

namespace App\Bundle\CoreBundle\Tests\Repository;

use App\Bundle\CoreBundle\Entity\Category;

class CategoryRepositoryTest extends DoctrineTestCase
{
...
}

use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;

/** @var ClassLoader $loader */
$loader = require __DIR__.'/../vendor/autoload.php';

AnnotationRegistry::registerLoader([$loader, 'loadClass']);

return $loader;

<?xml version="1.0" encoding="UTF-8"?>

<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="app/autoload.php"
>
    <php>
        <ini name="error_reporting" value="-1" />
        <server name="KERNEL_DIR" value="app/" />
    </php>

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>tests</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>src</directory>
            <exclude>
                <directory>src/*Bundle/Resources</directory>
                <directory>src/*/*Bundle/Resources</directory>
                <directory>src/*/Bundle/*Bundle/Resources</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>




Проблема была в автозагрузчике композера:
"autoload": {
        "psr-4": {
            "": "src/"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },


Решил вынести DoctrineTestCase в src. Хотя можно было бы оставить там же, пошаманив с ексклюдами.
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 1
AnisimovAM
@AnisimovAM
Программист
Добрый день.
У вас проблема с Namespace.

Вы указали App\Bundle\CoreBundle\Tests\Repository;
А файлы лежат в app/tests/AppCoreBundle/Repository;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы