【问题标题】:Return View Model in Unit Test在单元测试中返回视图模型
【发布时间】:2019-03-28 01:02:10
【问题描述】:

我正在使用 xUnit 和 .NET Core 2.0。我想在我的单元测试中返回要断言的视图模型。

一个例子是:

Project p1 = GetViewModel<Project>(controller.Edit(1));

private T GetViewModel<T>(IActionResult result) where T : class
{
    return (result as ViewResult)?.ViewData.Model as T;
}

当我使用 ViewResult 操作方法时,这有效。但是,我不知道如何将它用于 IActionResult 操作方法,例如在使用 UserManager 对象时异步使用的方法。

例如:

//This line causes a threading error (Cannot convert from Task<IActionResult> to IActionResult)
ProjectsListViewModel viewModel = GetViewModel<ProjectsListViewModel>(controller.List(2));
//unlike ViewModel, IActionResult does not have a ViewData property so this throws an error
ProjectsListViewModel result = controller.List(2).ViewData.Model as ProjectsListViewModel;

我的操作方法:

[Authorize]
public async Task<IActionResult> List(int page = 1)
{
    var user = await userManager.FindByNameAsync(User.Identity.Name);
    if(user != null)
    {
        IQueryable<Project> projectList = GetUserProjects(page, user);
        var model = GetProjectsListViewModel(projectList, page, user);
        return View(model);
    }
    TempData["message"] = "User not found";
    return RedirectToAction("Index", "Home");
}

【问题讨论】:

    标签: c# unit-testing asp.net-core xunit


    【解决方案1】:

    需要等待任务才能访问操作结果。

    ProjectsListViewModel result = GetViewModel<ProjectsListViewModel>(await controller.List(2));
    

    测试方法也需要异步等待

    public async Task Should_Return_ProjectsListViewModel() {
        //Arrange
    
        //...
    
        //Act
        IActionResult actual = await controller.List(2);
    
        //Assert
        ViewResult viewResult = actual as ViewResult;
        viewResult.Should().NotBeNull(); //FluentAssertions
    
        ProjectsListViewModel result = viewResult.ViewData.Model as ProjectsListViewModel;
        result.Should().NotBeNull();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多