Я пытаюсь создать тестовый проект xUnit для приложения MVC Core 2.2, основанный на шаблоне CQRS / ES. Я использую MediatR как часть моего шаблона CQRS / ES в приложении MVC.
В одной из моих команд, которые я хотел бы протестировать, я ввожу MediatR для публикации события после обновления записи клиента. Вроде как это:
public class UpdateCustomerCommandHandler : IRequestHandler<UpdateCustomerCommand>
{
public IMediator Mediator { get; set; }
public UpdateCustomerCommandHandler(IMediator mediator)
{
Mediator = mediator;
}
public Task<Unit> Handle(UpdateCustomerCommand request, CancellationToken cancellationToken)
{
//do some stuff
Mediator.Publish(new CustomersChanged());
return Task.FromResult(new Unit());
}
}
При написании модульного теста для этой команды я, очевидно, также должен создать экземпляр MediatR (или макета), который я затем передам команде во время выполнения теста.
[Fact]
public async void UpdateCustomerCommand_CustomerDataUpdatedOnDatabase()
{
//Arange
var mediator = new Mediator(); // doesn't work that way..
UpdateCustomerCommand command = new UpdateCustomerCommand();
UpdateCustomerCommandHandler handler = new UpdateCustomerCommandHandler(mediator);
//Act
Unit x = await handler.Handle(command, new System.Threading.CancellationToken());
//Asert
//Do the assertion
}
Однако создание экземпляра MediatR (вне приложения MVC, где я могу использовать существующую реализацию внедрения зависимостей) кажется не таким простым и, честно говоря, я на самом деле не понимаю, как я могу это сделать в моем методе тестирования.
Я понимаю, что потенциально мог бы использовать инфраструктуру внедрения зависимостей, для которой MediatR уже предоставляет реализацию (Ninject и т. Д.), Но на самом деле я не хочу использовать какие-либо сторонние библиотеки в моих модульных тестах, кроме MediatR, просто ради создания экземпляра.
Есть ли более простой способ создания экземпляра MediatR, который я мог бы наблюдать?