[英]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);
所以所需的步驟是:
Microsoft.AspNetCore.Mvc
NuGet 包安裝到您的測試項目。調整測試代碼如下:
// ... 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.