PHPUnit: как проверить команды или функции, которые изменяют состояние? - PullRequest
0 голосов
/ 12 ноября 2018

Попытка попасть в юнит-тестирование. Поскольку я также внедряю 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 передается в хранилище?

1 Ответ

0 голосов
/ 12 ноября 2018

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

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

TL; DR обоих переговоров: an origin vs type matrix.

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

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

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

...