我正在尝试为基于CQRS / ES模式的MVC Core 2.2应用程序构建xUnit Test项目。我将MediatR用作MVC应用程序中CQRS / ES模式的一部分。
在我要测试的命令之一中,一旦客户记录已更新,我就注入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());
}
}
Run Code Online (Sandbox Code Playgroud)
对此命令编写单元测试时,显然,我还必须创建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 …Run Code Online (Sandbox Code Playgroud)