如何在 ASP.NET 核心项目中使用 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 核心项目测试中未知。
我应该用什么来测试 Ok()
结果?
The probleme here is OkNegotiatedContentResult is unknow in asp net
core project test What should i use to test Ok() result?
您可以通过安装 Microsoft.AspNetCore.Mvc
NuGet 包来解决此问题,其中定义了 IActionResult
的实现。
但是 ASP.NET 核心不包含 OkNegotiatedContentResult
类型,它来自 ASP.NET Web API。在 ASP.NET 核心 Controller.Ok()
方法中 returns OkObjectResult
类型的实例。
你在这两个语句中也有不一致的检查:
var actionResult = await controller.Get() as OkNegotiatedContentResult<IEnumerable<GroupDto>>;
Assert.IsInstanceOfType(actionResult, typeof(OkNegotiatedContentResult<IEnumerable<GroupDto>>));
如果对象无法转换为请求的类型,as
运算符将 return 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 的 post 有帮助。最后一个 Assert 应该有点不同,可能是因为我们现在是 3.0:
Assert.IsInstanceOfType(typeof(IEnumerable<GroupDto>), actionResult.Value);
我正在使用 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 核心项目测试中未知。
我应该用什么来测试 Ok()
结果?
The probleme here is OkNegotiatedContentResult is unknow in asp net core project test What should i use to test Ok() result?
您可以通过安装 Microsoft.AspNetCore.Mvc
NuGet 包来解决此问题,其中定义了 IActionResult
的实现。
但是 ASP.NET 核心不包含 OkNegotiatedContentResult
类型,它来自 ASP.NET Web API。在 ASP.NET 核心 Controller.Ok()
方法中 returns OkObjectResult
类型的实例。
你在这两个语句中也有不一致的检查:
var actionResult = await controller.Get() as OkNegotiatedContentResult<IEnumerable<GroupDto>>;
Assert.IsInstanceOfType(actionResult, typeof(OkNegotiatedContentResult<IEnumerable<GroupDto>>));
如果对象无法转换为请求的类型,as
运算符将 return 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 的 post 有帮助。最后一个 Assert 应该有点不同,可能是因为我们现在是 3.0:
Assert.IsInstanceOfType(typeof(IEnumerable<GroupDto>), actionResult.Value);