Тестирование сервиса в Symfony4: класс не найден

Я хочу протестировать свой сервис в Symfony 4 с помощью моста phpunit, но когда я запускаю тест, я получаю:

Error: Class 'App\Service\CompanyManager' not found

Моя служба находится в src / Service / CompanyManager.php

тесты / Сервис / CompanyManagerTest.php:

namespace App\Tests\Service;

use App\Service\CompanyManager;
use PHPUnit\Framework\TestCase;
use App\Entity\Company;

class CompanyManagerTest extends TestCase
{
    public function testGetCompany()
    {
        $companyManager = new CompanyManager();
        $company = $companyManager->getCompany(2);
        $this->assertInstanceOf(Company::class,$company);
        $company = $companyManager->getCompany(1000);
        $this->assertNull($company);
    }
}

В config / services_test.yaml есть такой оператор:

# If you need to access services in a test, create an alias
# and then fetch that alias from the container. As a convention,
# aliases are prefixed with test. For example:
#
# test.App\Service\MyService: '@App\Service\MyService'

Итак, я попытался добавить:

test.App\Service\CompanyManager: '@App\Service\CompanyManager'

Но я все равно получаю ошибку:

$ ./vendor/bin/simple-phpunit tests
PHPUnit 5.7.27 by Sebastian Bergmann and contributors.

Testing tests
E                                                                   1 / 1 
(100%)

Time: 364 ms, Memory: 4.00MB

There was 1 error:

1) App\Tests\Service\CompanyManagerTest::testGetCompany
Error: Class 'App\Service\CompanyManager' not found

C:\...\web\vp20\tests\Service\CompanyManagerTest.php:22

Строка 22:

$companyManager = new CompanyManager();

Любая идея ?

PS: похоже, у кого-то там такая же проблема: Ошибка PHPUnit: класс не найден

класс App\Service\CompanyManager вы еще не проверяли?

Lê Phi 30.03.2018 10:33

да, класс есть, уверен на 100%

sylvain 30.03.2018 10:34

вы можете попробовать включить полный путь к классу CompanyManager для теста: 3 просто плохая идея, я думаю. :))

Lê Phi 30.03.2018 10:59

Похоже, проблема связана с автозагрузкой класса. Не могли бы вы убедиться, что путь к приложению определен в vendor/composer/autoload_psr4.php?

Idriz Šunja 31.03.2018 01:23

я думаю, что это: 'App \\ Tests \\' => array ($ baseDir. '/ tests'), 'App \\' => array ($ baseDir. '/ src'),

sylvain 02.04.2018 10:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
2 656
3

Ответы 3

Я думаю, вам следует расширить KernelTestCase (Symfony\Bundle\FrameworkBundle\Test\KernelTestCase) вместо TestCase

Результаты в PHP Неустранимая ошибка: класс 'Symfony \ Bundle \ FrameworkBundle \ Test \ KernelTestCase' не найден в (...) \ tests \ Service \ CompanyManagerTest.php в строке 18

sylvain 03.04.2018 15:53

ты это проверил? stackoverflow.com/questions/49571043/…

amr 04.04.2018 17:56

Возможно, нового класса еще нет в списке композиторов. Итак ... попробуйте бежать

composer dump-autoload

Я предлагаю использовать эту конфигурацию композитора

{
    "autoload": {
        "psr-4": {
            "": ["src", "testS"]
        }
    }
}

После того как вы определили эту конфигурацию автозагрузки в composer.json и после composer dump-autoload, у вас никогда не должно возникнуть проблем с автозагрузкой.

Я пробовал, но все та же проблема ... я думаю, что это проблема, связанная с symfony 4, возможно, связанная с этой темой: github.com/symfony/symfony-docs/issues/8097

sylvain 05.04.2018 12:05

У меня только что была эта проблема. Не знаю почему, но у меня не было phpunit.xml.dist в корне моего проекта. Ни один из примеров не показывает этого, но если вы добавите bootstrap=, а затем включите автоматически загруженный. Он должен начать находить ваши классы.

<phpunit xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation = "http://schema.phpunit.de/6.0/phpunit.xsd"
     bootstrap = "vendor/autoload.php"
>

В моем случае у меня был phpunit.xml.dist, но он отсутствовал. Примечание: я использую Symfony 3.4. После добавления информации начальной загрузки он перестал жаловаться на отсутствие класса Entity.

rashidkhan 27.04.2021 16:54

Другие вопросы по теме