Я хочу протестировать свой сервис в 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: класс не найден
да, класс есть, уверен на 100%
вы можете попробовать включить полный путь к классу CompanyManager для теста: 3 просто плохая идея, я думаю. :))
Похоже, проблема связана с автозагрузкой класса. Не могли бы вы убедиться, что путь к приложению определен в vendor/composer/autoload_psr4.php?
я думаю, что это: 'App \\ Tests \\' => array ($ baseDir. '/ tests'), 'App \\' => array ($ baseDir. '/ src'),






Я думаю, вам следует расширить KernelTestCase (Symfony\Bundle\FrameworkBundle\Test\KernelTestCase) вместо TestCase
Результаты в PHP Неустранимая ошибка: класс 'Symfony \ Bundle \ FrameworkBundle \ Test \ KernelTestCase' не найден в (...) \ tests \ Service \ CompanyManagerTest.php в строке 18
ты это проверил? stackoverflow.com/questions/49571043/…
Возможно, нового класса еще нет в списке композиторов. Итак ... попробуйте бежать
composer dump-autoload
Я предлагаю использовать эту конфигурацию композитора
{
"autoload": {
"psr-4": {
"": ["src", "testS"]
}
}
}
После того как вы определили эту конфигурацию автозагрузки в composer.json и после composer dump-autoload, у вас никогда не должно возникнуть проблем с автозагрузкой.
Я пробовал, но все та же проблема ... я думаю, что это проблема, связанная с symfony 4, возможно, связанная с этой темой: github.com/symfony/symfony-docs/issues/8097
У меня только что была эта проблема.
Не знаю почему, но у меня не было 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.
класс
App\Service\CompanyManagerвы еще не проверяли?