【问题标题】:How to consume .NET Core FileContentResult in an httpClient test method如何在 httpClient 测试方法中使用 .NET Core FileContentResult
【发布时间】:2020-10-31 21:55:28
【问题描述】:

我有一个 .NET Core 2.2 API 控制器方法,它返回 FileContentResult,如下所示:

  [HttpGet]
  public async Task<IActionResult> Get()
  {
    return File(_service.GetCsvFile(), "text/csv", "results.csv");
  }

另外,我有一个使用 WebHostFixture 和 httpClient 来获取结果的集成测试。但是,无论我尝试什么方法,内容总是空的。虽然有一个内容被返回的文件:

  var response = await WebHost.Client.GetAsync(url, HttpCompletionOption.ResponseContentRead);

  var result = await response.Content.ReadAsByteArrayAsync();

此外,当我执行以下操作时,不会读取任何内容:

  var response = await WebHost.Client.GetByteArrayAsync(url);

使用此 WebHostFixture 的所有其他集成测试都运行成功,因此这似乎是我的测试环境中唯一未正确返回其数据的端点。当我使用Postman 调用端点时,会正确返回一个包含内容的 CSV 文件。

另外,在 Postman 中,除了接收 body 中的二进制数据外,还返回以下 headers:

但是,在我的测试方法中,调用 GetAsync 方法后, response.Content.Headers.ContentType"text/csv",但 response.Content.Headers.ContentLength 是 0。

我做错了什么,为什么这里没有返回二进制数据?

【问题讨论】:

  • 您是否尝试过调试测试并设置断点?
  • 当然,在控制器方法中,一个适当的 FileContentResult 与数据一起返回,在测试中结果是一个空字节[]。
  • 在阅读内容前使用await。喜欢:var result = await response.Content.ReadAsByteArrayAsync();
  • 你检查你的响应在HttpResponseMessage中是否有成功状态码?
  • 你能编辑和发布你的 WebHostFixture 是怎样的吗?

标签: c# api .net-core integration-testing


【解决方案1】:

试试这个:

byte[] BytesResult = await httpClient.GetByteArrayAsync("YourRequestUri").ConfigureAwait(false);

【讨论】:

    【解决方案2】:

    将其转换为字符串并比较结果。它适用于批准测试。 示例:

    var result = fileresult as FileContentResult; 
    
    byte[] buffer =  result.FileContents;
    
    string s = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);
    

    【讨论】:

      【解决方案3】:

      读取文件时需要使用GetStreamAsync

      例子:

      using (var csvStream = await WebHost.Client.GetStreamAsync(url))
      {
          // Do something with stream contents.
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-27
        • 2018-08-08
        • 2021-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多