2017-09-15 99 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) 
}