Использовать службу Symfony в phpunit

#symfony #service #phpunit

#symfony #Обслуживание #phpunit

Вопрос:

Я хотел бы протестировать свой сервис DAO.

Проблема в том, что при выполнении моего теста ничего не добавляется. Тест не выполняется. Но я уверен, что конфигурационный файл phpunit.xml.dist в порядке, потому что, например, если я допущу ошибку в строке «использовать», тест покажет мне ошибки.

Итак, мне нужна ваша помощь..

Мой первый тест :

 namespace RepositoryBundleTestsDAO;

use RepositoryBundleEntityUser;
use RepositoryBundleEnumRoleEnum;
use SymfonyBundleFrameworkBundleTestKernelTestCase;


class UserDAOTest extends KernelTestCase
{
    private $userDAO;
    private $logger;

    public function setUp()
    {
        self::bootKernel();
        $this->userDAO = static::$kernel->getContainer()->get('repository.userDAO');
        $this->logger = static::$kernel->getContainer()->get('logger');
        $logger->notice('Show the log'); // Nothing is in my console.. (I configure Monolog to display in the console)
    }

    public function testTRUC()
    {
        //Stupid test but not executed !!!???
        $i = 1;
        $this->assertTrue($i == 1);
    }

    public function testCreate()
    {
        //Real test but not executed !!!???
        $user1 = new User();
        $user1->setName("TestName");
        $user1->setEmail("TestEmail");
        $user1->setPassword("TestPassword");
        $user1->setMemberNumber(12345);
        $user1->setAdmin(true);
        $user1->setRole(RoleEnum::User);

        $user1 = $UserDAO->save($user1);

        $this->assertTrue($user1->getId() > 0);
        $this->assertEquals("TestName", $user1->getName());
        $this->assertEquals("TestEmail", $user1->getEmail());
        $this->assertEquals("TestPassword", $user1->getPassword());
        $this->assertEquals(12345, $user1->getMemberNumber());
        $this->assertEquals(true, $user1->isAdmin());
        $this->assertEquals(RoleEnum::User, $user1->getRole());
    }
  

phpunit.xml.dist

 <?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="phpunit.xsd"
         bootstrap="bootstrap.php.cache"
         backupGlobals="false"
         verbose="true">

    <testsuites>
        <testsuite name="Project Test Suite">
            <directory>../src/*Bundle/Tests</directory>
        </testsuite>
    </testsuites>

    <php>
        <const name="PHPUNIT_TESTSUITE" value="true"/>
    </php>
</phpunit>
  

Когда я выполняю команду :

Экран консоли

Спасибо за вашу помощь. Я новичок в Symfony и PHPUnit и потерял много времени из-за такого рода проблем..

Комментарии:

1. Довольно очевидно, что ваши тесты не выполняются, несмотря на ваш комментарий по поводу инструкции use. Подтвердите с помощью матрицы в программе установки, а затем посмотрите, что вы сделали с XML-файлом phpunit.

2. Я не понимаю, что вы подразумеваете под «Подтвердить с помощью матрицы в настройках», я уверен, что PHPUnit настроен правильно, потому что, если я удалю все строки о сервисе UserDao, он будет работать нормально. Тем не менее я добавляю эту информацию

Ответ №1:

Пожалуйста, поправьте меня, если я ошибаюсь, но ваш тест находится в srcRepositoryBundleTestsDAO , и вы запускаете phpunit в приложении folder…

Попробуйте phpunit (Редактировать, конечно, для опции c требуется аргумент :/), и это должно сработать.

Ваша конфигурация настроена на поиск ‘../src/*Bundle/Tests’. Если вы укажете папку app в качестве места для поиска test, то ваша конфигурация рассматриваться не будет.

Комментарии:

1. При выполнении phpunit -c я должен указать, где находится файл конфигурации, который необходимо прочитать команде. И этот конфигурационный файл находится в app / . Я уверен, что тест найден командой phpunit, потому что с той же конфигурацией, но без setUp () и без какого-либо вызова $ UserDao-> … тесты оправданы. Итак, проблема возникла из-за вызова моего сервиса. Но я не знаю почему.

2. Хорошо, возможно, это неправильный подход, я исправил свой ответ, конечно, если вы предоставляете опцию -c, вы должны предоставить файл конфигурации.

3. Вы пытались отладить setUp()? Я имею в виду, может быть, сначала попробуйте просто раскомментировать службу dao. Если он работает, у вас определенно проблема с вашим сервисом (на что это похоже).