#php #dependency-injection #phpunit
#php #внедрение зависимостей #phpunit
Вопрос:
За последние несколько дней я много читал о внедрении зависимостей. Теперь, поскольку я пытаюсь улучшить свои навыки phpunit, я думал, как реализовать этот DI. в моих модульных тестах.
Допустим, у меня есть два объекта:
class Event{
}
class Shift{
public function __construct(Event $e)
{
(...)
}
}
Вот как я по сути понимаю DI.
Теперь я хочу написать тест для моего конструктора shift:
class ShiftTest extends
ModelTestCase
{
public function testCanCreateShift()
{
$e = new JsEntityEvent();
$this->assertInstanceOf('JSEntityShift', new JSEntityShift($e));
}
}
Но теперь я не хочу определять здесь полный объект события. Итак, каков рекомендуемый способ создания моего объекта event в PHPUnit?
Комментарии:
Ответ №1:
Для этого используются mocks, stubs. etc. Вы создаете SUT (тестируемую систему) и моделируете все зависимости. Вы не смогли бы сделать это без DI в первую очередь.
Комментарии:
1. Но должен ли я использовать заглушку или макет?
2. Самое большое отличие заключается в том, что заглушки состояния теста (т. Е. После того, как я сделаю x, состояние y будет z) и имитирует поведение теста (т. Е., Если я сделаю x, произойдет y). Это потрясающая статья на эту тему: martinfowler.com/articles/mocksArentStubs.html