【问题标题】:How to unit test MediatR method that returns Unit.Value如何对返回 Unit.Value 的 MediatR 方法进行单元测试
【发布时间】:2020-11-17 10:29:04
【问题描述】:

如何对返回 Unit.Value 的 MediatR 方法进行单元测试? 在 MediatR 中,我也不明白 Unit.Value 代表什么。 这是否意味着它在错误的情况下返回 false 并在所有其他实例中返回 true?因此,在这种情况下,单元测试的一种方法是确保没有错误(模拟依赖项等),并检查 Unit.Value 形状的结果是否等于 true? 谢谢。

【问题讨论】:

    标签: c# unit-testing mediatr


    【解决方案1】:

    Unit 是具有单个值的类型。您可以将其视为 void,除了是常规类型而不是关键字。

    您应该像任何返回 void 的方法一样测试该方法:验证它是否具有所需的副作用。

    【讨论】:

      【解决方案2】:

      您可以将Unit 视为void - 不返回任何内容。

      (注意:较新版本的 Mediatr 将其包装起来,因此您可以返回 Task

      但出于示例目的,假设您有这样的Handler

      public class MyHandler : IRequestHandler<Unit>
      {
          public MyHandler(IDoSomething doSomething)
          {
              _doSomething = doSomething;
          }
      
          public Task Handle(MyRequest req, CancellationToken cancellationToken)
          {
              _doSomething.Do();
      
              return Unit.Value;
          }
      }
      

      您的测试可以模拟您的依赖项,并断言它被调用:

      public class MyHandlerTests
      {
          private Mock<IDoSomething> _doSomethingMock;
      
          [SetUp]
          public void SetUp()
          {
              _doSomethingMock = new Mock<IDoSomething>();
          }
      
          [Test]
          public async Task Calls_DoSomething()
          {
              // Arrange
              var handler = new MyHandler(_doSomethingMock.Object);
      
              // Act
              await handler.Handle(new MyRequest(), CancellationToken.None);
      
              // Assert
              _doSomethingMock.Verify(x => x.Do(), Times.Once);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-05-10
        • 2016-10-18
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多