PHPUnit: как проверить команды или функции, которые изменяют состояние?

Попытка попасть в юнит-тестирование. Поскольку я также внедряю CQRS, мне было интересно, как бы я протестировал что-то вроде этого:

class CommandHandler{
private $repository;
public function __construct( $repository ){
$this->repository = $repository;
}
public function handle( $command ) {
$Entity = new Entity( $command->getSomething() );
$this->repository->add( $Entity );
}
}

Учитывая, что модульное тестирование — это тестирование общедоступного API моих классов, что именно я хотел бы протестировать здесь? Это пример Entity передается в хранилище?

0

Решение

Попытка попасть в юнит-тестирование. Поскольку я также внедряю CQRS, мне было интересно, как бы я протестировал что-то подобное

Две презентации, которые вы хотите посмотреть:

TL; DR обоих переговоров: матрица происхождения против типа.

Отправка запросов и командных сообщений в субъект теста утверждается путем запроса состояния испытуемого. Командные сообщения послал от испытуемый проверяется ожидаемым образом — вы подтверждаете, что было отправлено правильное сообщение, не беспокоясь о последствиях этого сообщения.

Таким образом, ответ на ваш вопрос частично зависит от того, является ли репозиторий для этого теста частью тестируемой системы или нет. граница. Если хранилище является частью тестируемой системы, тогда вы можете рассматривать весь тест как проверку входящего сообщения и запрашивать состояние хранилища. Если хранилище является частью границы (если оно предусмотрено тестом), то вы проверяете ожидание — правильно ли был вызван метод в хранилище?

В последнем случае возникает еще один интересный вопрос: нужно ли проверять ожидание на запах кода? Может случиться так, что проверка — путем проверки соответствия ожиданиям — фактически выявляет проблему в дизайне; может быть, должно быть больше измерительные приборы в самом обработчике команд, чтобы тест мог запрашивать сам обработчик команд, чтобы выяснить, какие сообщения были отправлены. Скотт Беллвер Учение о полезных объектах исследует эту идею.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector