【问题标题】:Unit Test Task<IActionResult>单元测试任务<IActionResult>
【发布时间】:2017-09-15 09:32:06
【问题描述】:

我正在开发一个 .Net Core Web API 应用程序。我的控制器上有以下方法:

[HttpGet]
public async Task<IActionResult> GetArtists()
{
  var permissions = await _permissionsService.GetPermissionsAsync(HttpContext);
  var artists = _artistsService.GetAllArtists(permissions.UserId, permissions.IsAdministrator);
  return Ok( new { artists });
}

我想编写一个测试来断言我确实得到了200 OK 结果。

我尝试了以下方法:

[TestMethod]
public void GetArtists_ReturnsOKStatusCode()
{
  // arrange
  var artistsController = new ArtistsController(_mockPermissionsService.Object, _mockArtistsService.Object, _mockLogger.Object);
  // act
  var getArtistsResult = artistsController.GetArtists();
  var okResult = getArtistsResult as OkObjectResult;

  Assert.IsInstanceOfType(okResult, OkObjectResult)
}

但我在投射到OkObjectResult 的行上出现错误。它说我无法将类型 Task&lt;IActionResult&gt; 转换为 OkObjectResult

【问题讨论】:

    标签: c# unit-testing asp.net-core mstest


    【解决方案1】:

    调用异步方法时需要使用await

    var getArtistsResult = await artistsController.GetArtists();
    

    这反过来使您的测试方法async Task

    [TestMethod]
    public async Task GetArtists_ReturnsOKStatusCode()
    {
      ...
    }
    

    【讨论】:

      【解决方案2】:

      你需要接收函数GetArtists()的结果(不是Task),像这样:

      var getArtistsResult = artistsController.GetArtists().Result;
      

      然后你可以将它转换为 OkObjectResult。

      或者您可以尝试像这样更改您的测试:

      [TestMethod]
      public async Task GetArtists_ReturnsOKStatusCode()
      {
        // arrange
        var artistsController = new ArtistsController(_mockPermissionsService.Object, _mockArtistsService.Object, _mockLogger.Object);
        // act
        var getArtistsResult = await artistsController.GetArtists();
        var okObjectResult = settings.Should().BeOfType<OkObjectResult>().Subject;
        var result = okObjectResult.Value.Should().BeAssignableTo<SomeType>();
      }
      

      我使用了 FluentAssetions lib 中的一些扩展方法,非常有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-08
        • 2019-08-02
        • 1970-01-01
        • 2018-07-03
        • 2018-10-17
        • 1970-01-01
        • 2011-06-23
        相关资源
        最近更新 更多