【问题标题】:invoking an async task on fluentassertion在 fluentassertion 上调用异步任务
【发布时间】:2019-01-10 16:49:41
【问题描述】:

可能是一个简单的,但不能让它工作;

我已将方法上的签名更改为 Task

在我的单元测试中,我使用流利的断言。

但无法让它工作:

        _catalogVehicleMapper
            .Invoking(m => m.MapToCatalogVehiclesAsync(searchResult, filtersInfo, request, default(CancellationToken)))
            .Should().Throw<ArgumentException>()
            .WithMessage("One of passed arguments has null value in mapping path and can not be mapped");

MapToCatalogVehiclesAsync 是异步方法,但我需要等待它,但等待和异步调用,似乎没有这样做.. 有人..?

【问题讨论】:

    标签: c# fluent-assertions


    【解决方案1】:

    虽然法比奥的回答也是正确的,但你也可以这样做:

    _catalogVehicleMapper
       .Awaiting(m => m.MapToCatalogVehiclesAsync(searchResult, filtersInfo, request, default(CancellationToken)))
       .Should().Throw<ArgumentException>()
       .WithMessage("One of passed arguments has null value in mapping path and can not be mapped");
    

    另外,我建议在WithMessage 中始终使用通配符。请参阅this blog post 中的第 10 点。

    【讨论】:

      【解决方案2】:

      Invoking&lt;T&gt; 扩展方法返回Action,它与异步方法等效于async void - 因此不会等待异常。

      作为解决方法,您可以将测试下的方法包装到 Func&lt;Task&gt;

      [Fact]
      public async Task ThrowException()
      {
          Func<Task> run = 
              () => _catalogVehicleMapper.MapToCatalogVehiclesAsync(
                  searchResult, 
                  filtersInfo, 
                  request, 
                  default(CancellationToken));
      
          run.Should().Throw<ArgumentException>();
      }
      

      【讨论】:

      • 谢谢!这种技术使我能够保持 Arrange / Act / Assert 模式! :)
      猜你喜欢
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多