2017-09-15 9 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 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にキャストしていますライン上のエラーを取得します。

var getArtistsResult = artistsController.GetArtists().Result; 

次にあなたがOkObjectResultにキャストすることができます:それは、私はあなたがこのような関数のGetArtists()(ないタスク)の結果を受信する必要がOkObjectResult

答えて

2

あなたは非同期メソッドを呼び出すときawaitを使用する必要があります。

var getArtistsResult = await artistsController.GetArtists(); 

これは、順番に、あなたの試験方法async Taskます:

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

の種類Task<IActionResult>を変換することはできませんと言います。

それとも、このようなあなたのテストを変更しようとすることができます。

[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) 
} 
関連する問題