2017-09-15 100 views
1

我正在研究.Net Core Web API应用程序。我有我的控制器上下面的方法:单元测试任务<IActionResult>

[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确定结果。

我已经试过如下:

[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<IActionResult>不能转换为OkObjectResult

回答

2

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

var getArtistsResult = await artistsController.GetArtists(); 

这又使得您的测试方法async Task

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

您需要接收功能GetArtists()(未完成的任务)的结果,这样的:

var getArtistsResult = artistsController.GetArtists().Result; 

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

或者你可以尝试改变你的测试是这样的:

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

    Assert.IsInstanceOfType(getArtistsResult, Okob) 
}