簡體   English   中英

如何在 ASP.NET Core 項目中使用 MStest 測試 Ok() 結果

[英]How to test Ok() result using MStest in ASP.NET Core project

我正在使用 MStest 來測試我的控制器。

我想測試這個動作:

[HttpGet(Name = "GetGroups")]
public async Task<IActionResult> Get()
{
    var groups = await _unitOfWork.Repository<Groupe>().GetAllAsync();
    var groupsDto = Mapper.Map<IEnumerable<GroupDto>>(groups);
    if (groupsDto.Count() == 0)
    {
        return NotFound();
    }
    return Ok(groupsDto);
}

此操作的測試之一如下所示:

[TestMethod]
public async Task Group_Get_Should_Return_InstanceOfTypeOkNegotiatedContentResultIEnumerableGroupDto()
{
    // Arrange
    moqGroupRepository.Setup(g => g.GetAllAsync(null)).ReturnsAsync(groups).Verifiable();
    moqUnitOfWork.Setup(x => x.Repository<Groupe>()).Returns(moqGroupRepository.Object);

    var controller = new GroupController(moqUnitOfWork.Object);

    // Act
    var actionResult = await controller.Get() as OkNegotiatedContentResult<IEnumerable<GroupDto>>;

    // Assert
    Assert.IsInstanceOfType(actionResult, typeof(OkNegotiatedContentResult<IEnumerable<GroupDto>>));
}

這里的問題是OkNegotiatedContentResult在 ASP.Net Core 項目測試中是未知的。

我應該用什么來測試Ok()結果?

這里的問題是 OkNegotiatedContentResult 在 asp net core 項目測試中未知 我應該用什么來測試 Ok() 結果?

您可以通過安裝Microsoft.AspNetCore.Mvc NuGet 包來解決該問題,其中定義了IActionResult實現。

但是 ASP.NET Core 不包含OkNegotiatedContentResult類型,它來自 ASP.NET Web API。 在 ASP.NET Core Controller.Ok()方法中返回OkObjectResult類型的實例。

您在這兩個語句中也有不一致的檢查:

var actionResult = await controller.Get() as OkNegotiatedContentResult<IEnumerable<GroupDto>>;
Assert.IsInstanceOfType(actionResult, typeof(OkNegotiatedContentResult<IEnumerable<GroupDto>>));

如果對象無法轉換為請求的類型, as運算符將返回null 因此,您可以使用以下內容替換第二個檢查:

Assert.IsNotNull(actionResult);

所以所需的步驟是:

  1. Microsoft.AspNetCore.Mvc NuGet 包安裝到您的測試項目。
  2. 調整測試代碼如下:

     // ... using Microsoft.AspNetCore.Mvc; [TestMethod] public async Task Group_Get_Should_Return_InstanceOfTypeOkNegotiatedContentResultIEnumerableGroupDto() { // Arrange moqGroupRepository.Setup(g => g.GetAllAsync(null)).ReturnsAsync(groups).Verifiable(); moqUnitOfWork.Setup(x => x.Repository<Groupe>()).Returns(moqGroupRepository.Object); var controller = new GroupController(moqUnitOfWork.Object); // Act var actionResult = await controller.Get() as OkObjectResult; // Assert Assert.IsNotNull(actionResult); Assert.IsInstanceOfType(actionResult.Value, typeof(IEnumerable<GroupDto>)); }

Code Fuller 的帖子有幫助。 最后一個 Assert 應該有點不同,可能是因為我們現在在 3.0 上:

    Assert.IsInstanceOfType(typeof(IEnumerable<GroupDto>), actionResult.Value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM