Как мне выполнить модульное тестирование командного обработчика, который возвращает пустоту? - PullRequest
0 голосов
/ 15 февраля 2019

Пожалуйста, смотрите код ниже:

public class CreatePersonHandler
        : IRequestHandler<CreatePersonCommand,Unit>
    {

 public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
        {
            var person = _enquiryFactory.Create(message.Gender, message.Salary);
            var offers = getAvailableOffers(); 
            person.AssignOffers(offers);
            await _mediator.DispatchDomainEventsAsync(person);
            return Unit.Value;
        }
  }

Обратите внимание, что:

1) У команды нет состояния.
2) Командный метод не имеет возвращаемого значения.

Я прочитал несколько подобных вопросов, например, здесь: Модульное тестирование пустых методов? .Являются ли обработчики команд CQRS, которые возвращают пустоты, классифицированными как информационные и не должны тестироваться модулем?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я вижу, что вы добавляете / вызываете новые события, используя .DispatchDomainEventsAsync ().Вместо того, чтобы ничего не возвращать, вы можете вернуть эти события и написать простой модульный тест для подсчета количества или структурирования этих событий.

0 голосов
/ 15 февраля 2019

По сути, тестирование «обработчика команд», возвращающего void, ничем не отличается от тестирования метода, возвращающего void - возврат void является четким признаком того, что метод вызывается для его побочных эффектов, поэтому вы проверяете те.

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

var person = _enquiryFactory.Create(message.Gender, message.Salary);
var offers = getAvailableOffers(); 
person.AssignOffers(offers);
await _mediator.DispatchDomainEventsAsync(person);
return Unit.Value;

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

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

Не могли бы вы уточнить, что вы подразумеваете под: «Предполагая, что части совмещаются».I

В «строго типизированном» языке компилятор / интерпретатор сделал бы для нас много проверок.Если система типов не удовлетворена, то мы получим сообщение об ошибке перед загрузкой метода в среду выполнения.

...