如何在ASP.NET Core项目中使用MStest测试Ok()结果

奥马尔·阿姆佐格(Omar AMEZOUG)

我正在使用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>>));
}

这里的问题是ASP.Net Core项目测试中不知道OkNegotiatedContentResult

我应该用什么来测试Ok()结果?

代码丰满

这里的问题是在ASP网络核心项目测试中OkNegotiatedContentResult是未知的,我应该使用什么来测试Ok()结果?

您可以通过安装定义了Microsoft.AspNetCore.Mvc实现的NuGet包来解决此问题IActionResult

但是,ASP.NET Core不包含OkNegotiatedContentResult类型,它来自ASP.NET Web API。在ASP.NET CoreController.Ok()方法中返回实例的OkObjectResult类型。

您在这两个语句中的检查也不一致:

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

asnull如果无法对象强制转换为请求的类型,则运算符将返回因此,您可以将第二张支票替换为以下内容:

Assert.IsNotNull(actionResult);

因此,所需步骤为:

  1. Microsoft.AspNetCore.MvcNuGet软件包安装到您的Test项目。
  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>));
    }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在ASP.NET Core中使用Bootstrap 4

如何在ASP.NET Core中使用ILogger进行单元测试

如何在ASP.NET Core中使用npm

如何在ASP.NET Core中使用区域

如何在ASP.NET Core中使用SqlClient?

如何在ASP.NET Core中使用jquery

如何在ASP.NET Core MVC项目中使用jQuery和Ajax从视图调用api?

如何在ASP.NET Core应用中使用HttpClient

在测试项目中使用ASP.NET Core的ConfigurationBuilder

如何在Visual Studio测试中使用ASP.NET Core环境变量

如何在ASP.NET Core(面向.NET Framework的目标)项目中引用旧程序集?

如何在Visual Studio ASP.NET Core项目中使用语义UI反应?

如何在ASP.NET MVC ReactJS项目中使用“导入”?

如何在Rider中使用F#创建ASP.NET Core WebAPI项目?

如何在Asp.Net Core 2.1项目中使用EF Core 2.2.4数据库

如何在.net Core项目中使用SignalR Core监听Postgresql数据库?

如何在ASP.NET Core MVC和Angular项目中使用Angular Material组件(特别是滑块)?

如何在asp.net中使用<%%>?

如何在ASP.net中使用SQL查询的结果?

如何在ASP.NET MVC项目中使用.NET的GroupDocs Viewer?

如何在ASP.NET核心项目中使用多个gulpfile.js?

如何在面向 net462 框架的 .Net Core 项目中使用 ConfigurationPropertyAttribute?

如何在 Asp.net Core 项目中使用 SoapCore 在项目路由文件夹中公开 wsdl

如何在 ASP.Net Core 3 中使用 UseNodeModules?

如何在 Asp.Net Core 中使用 Ninject?

如何在 Azure DevOps 管道中使用 ASP.NET Core 依赖项运行 XUnit 测试?

如何在 ASP.NET Core 中使用 mysql 进行单元测试、actionresult

如何在 ASP.NET Core 中使用异步“ForEach”?

如何在 ASP.NET Core 中使用 API?