Это мой тестовый класс PhpUnit:
<?php
namespace tests\AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class SendEmailControllerTest extends WebTestCase
{
public function testMailIsSentAndContentIsCorrect()
{
$client = static:: createClient();
...
}
}
Но когда я пытаюсь запустить его, я получаю сообщение об ошибке:
Unable to guess the Kernel directory.
C:\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Test\KernelTestCase.php:62
C:\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Test\KernelTestCase.php:138
C:\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Test\KernelTestCase.php:184
C:\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Test\KernelTestCase.php:165
C:\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Test\WebTestCase.php:33
C:\myProject\tests\AppBundle\Controller\SendEmailControllerTest.php:12
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Remaining deprecation notices (3)
1x: Using the KERNEL_DIR environment variable or the automatic guessing based on the phpunit.xml / phpunit.xml.dist file location is deprecated since Symfony 3.4. Set the KERNEL_CLASS environment variable to the fully-qualified class name of your Kernel instead. Not setting the KERNEL_CLASS environment variable will throw an exception on 4.0 unless you override the :createKernel() or :getKernelClass() method.
1x in SendEmailControllerTest::testMailIsSentAndContentIsCorrect from tests\AppBundle\Controller
1x: The Symfony\Bundle\FrameworkBundle\Test\KernelTestCase::getPhpUnitXmlDir() method is deprecated since Symfony 3.4 and will be removed in 4.0.
1x in SendEmailControllerTest::testMailIsSentAndContentIsCorrect from tests\AppBundle\Controller
1x: The Symfony\Bundle\FrameworkBundle\Test\KernelTestCase::getPhpUnitCliConfigArgument() method is deprecated since Symfony 3.4 and will be removed in 4.0.
1x in SendEmailControllerTest::testMailIsSentAndContentIsCorrect from tests\AppBundle\Controller
C:\xampp\php\php.exe C:/myProject/vendor/phpunit/phpunit/phpunit --no-configuration tests\AppBundle\Controller\SendEmailControllerTest C:\myProject\tests\AppBundle\Controller\SendEmailControllerTest.php --teamcity
Testing started at 23:09 ...
PHPUnit 5.6.0 by Sebastian Bergmann and contributors.
Process finished with exit code 2
Но проблема в том, что я не понимаю, как исправить проблемы устаревания, указанные в трассировке ...
Редактировать:
Следуя официальной документации, я добавил в файл phpunit.xml.dist
<?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 = "vendor/autoload.php"
>
<php>
<ini name = "error_reporting" value = "-1" />
<env name = "KERNEL_CLASS" value = "App\Kernel" />
<server name = "KERNEL_CLASS" value = "AppKernel" />
</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>
Тем не мение:
1) Я все еще получаю ту же ошибку
2) Код http://schema.phpunit.de/4.8/phpunit.xsd отображается красным цветом с сообщением «URI не зарегистрирован (Настройки | Языки и рамки | Схемы и DTD). Итак, я пошел в это место и в разделе« Внешние схемы и DTD »добавил этот URI, а местоположение является корнем моего проекта. Однако это красное предупреждение сохраняется, и я подозреваю, что оно связано с место расположения, но где это?






To run your functional tests, the WebTestCase class needs to know which is the application kernel to bootstrap it. The kernel class is usually defined in the
KERNEL_CLASSenvironment variable (included in the default phpunit.xml.dist file provided by Symfony):<?xml version = "1.0" charset = "utf-8" ?> <phpunit> <php> <!-- the value is the FQCN of the application kernel --> <env name = "KERNEL_CLASS" value = "App\Kernel" /> </php> <!-- ... --> </phpunit>
Установка этого в phpunit.xml.dist позволяет мне работать с symfony 3.4
<php>
<!-- the value is the FQCN of the application kernel -->
<env name = "KERNEL_CLASS" value = "AppKernel" />
</php>
Я могу подтвердить, что это очищает сообщения об устаревании KernelTestCase в Symfony 3.4.17.
Никита У. прав здесь, но я хотел указать на пару мелочей, которые могут помочь кому-то еще в будущем, особенно местоположение.
Согласно многим заметкам, которые я нашел, особенно комментариям из репо, это должен быть <server name ..., но я обнаружил, что <env name ... тоже работает. Он должен находиться в блоке <php> файлов phpunit.xml.dist или phpunit.xml (следует использовать только один из них) в корневом каталоге проекта. Если ни одного файла нет, создайте его (кажется, он работает) и используйте пример Никиты для текста.
Также обратите внимание, что в Symfony 4 с Flex значение равно «App \ Kernel», а не «AppKernel». Больше можно найти здесь: https://github.com/symfony/symfony-standard/issues/1073