📜  如何测试 mediatr (1)

📅  最后修改于: 2023-12-03 15:24:51.683000             🧑  作者: Mango

如何测试 MediatR

简介

MediatR是一个C#开源库,实现了Mediator模式,它将请求和处理程序解耦,使应用程序可以更加灵活、可扩展。本文将介绍如何对MediatR进行测试。

测试前提

在了解如何测试MediatR之前,我们需要确保以下几点:

  1. 程序员对MediatR有基本的了解,知道如何使用它来处理应用程序中的请求。
  2. 应用程序中已经实现了各种请求和处理程序。
测试方法

在对MediatR进行测试的过程中,我们将使用如下工具:

  1. NUnit:一个开源的测试框架。
  2. NSubstitute:一个开源的mock框架,在测试过程中会用到。

以下是测试MediatR的步骤:

步骤1:安装依赖

首先,我们需要使用NuGet将NUnit和NSubstitute两个依赖项安装到我们的解决方案中。使用以下命令:

Install-Package NUnit -Version 3.12.0
Install-Package NSubstitute -Version 4.2.2
步骤2:创建测试

创建一个名为"RequestHandlerTests.cs"的类,并进行如下测试:

[TestFixture]
public class RequestHandlerTests
{
    private IMediator _mediator;
    private IRequestHandler<Request, Response> _requestHandler;
        
    [SetUp]
    public void SetUp()
    {
        _mediator = Substitute.For<IMediator>();
        _requestHandler = new RequestHandler(_mediator);
    }
        
    [Test]
    public async Task HandleAsync_WithValidRequest_ReturnsResponse()
    {
        //Arrange
        var request = new Request();
        var expectedResponse = new Response();
        _mediator.Send(request).Returns(expectedResponse);
            
        //Act
        var response = await _requestHandler.HandleAsync(request, CancellationToken.None);
            
        //Assert
        Assert.AreEqual(expectedResponse, response);
        await _mediator.Received(1).Send(request);
    }
        
    [Test]
    public void HandleAsync_WithNullRequest_ThrowsException()
    {
        //Arrange
        Request request = null;
            
        //Act & Assert
        Assert.ThrowsAsync<ArgumentNullException>(() => _requestHandler.HandleAsync(request, CancellationToken.None));
    }
}

在这个测试中,我们创建了一个模拟的Mediator实例,并使用NSubstitute创建了一个模拟的请求处理程序。在测试方法之前,我们使用SetUp方法初始化这些变量。

第一个测试方法测试了请求处理程序是否能够正确处理请求并返回响应。我们使用Arrange部分设置我们的请求和期望的响应,并将模拟Mediator的Send方法设置为返回期望的响应。最后,我们使用Act部分执行我们的请求处理程序,并Assertion部分检查返回的响应是否等于期望的响应。

第二个测试方法测试请求是否为空,并确保它引发正确的异常。

步骤3:运行测试

在测试类中单击右键,选择“运行测试”,我们就可以运行我们的测试了。

结论

通过按照上述步骤,我们已经成功地测试了使用MediatR的请求和处理程序。这为我们提供了有力的测试套件,使我们的应用程序更加健壮和可靠。