Внедрение зависимостей в тестах - PullRequest
0 голосов
/ 30 сентября 2019

Я относительно новичок в Symfony. Теперь я написал библиотеку, небольшой класс-декоратор, который хотел бы протестировать.

Класс с именем MessageHtmlDecorator->decorateByKey ожидает объект MessageManage. MessageManage нужен класс Logger. И это простой случай.

Это классы , а не службы , просто простые утилиты / библиотеки!

Так что мне нравится создавать такой тест:

public function testDecorateByKey()
{
    $messageManage = new MessageManage();
    $htmlMessageDecorate = new HtmlMessageDecorate();
    $this->assertEquals('<p>First error message</p>', $htmlMessageDecorate->decorateByKey($messageManage, 'error'));
}

MessageManage конструктор:

public function __construct(LoggerInterface $logger)
{
    $this->logger = $logger;
}

Как я могу сделать так, чтобы MessageManage автоматически вводился с помощью логгера?

Итак, чего я хочу добиться, так это чтобы внедрение зависимости было таким же, как в проекте Symfony.

Я попытался выполнить поиск по страницам Symfony без успеха.

Если что-то не понятноПрокомментируйте, пожалуйста, уточню.

1 Ответ

0 голосов
/ 30 сентября 2019

PHPUnit обеспечивает встроенный макет, я сомневаюсь, что Symfony сможет автоматически вводить макеты для вашего теста, поскольку он не знает, какими должны быть утверждения.

$mockLogger = $this->createMock(LoggerInterface::class);
$mockLogger->expects($this->at(0))
    ->method("error")
    ->with("An error occurred");
$messageManage = new MessageManage($mockLogger);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...