#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. Если он работает, у вас определенно проблема с вашим сервисом (на что это похоже).