gpt4 book ai didi

c# - 如何在 ASP.NET Core 中对 ViewBag 进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 23:12:40 26 4
gpt4 key购买 nike

在为 ASP.NET Core 应用程序编写单元测试期间,我意识到 ViewData可从 ViewResult 访问但是ViewBag不是。

我的 HomeController :

public class HomeController : Controller
{
private readonly IHeroRepository _heroItems;
private readonly IQuestRepository _questItems;

public HomeController(
IHeroRepository heroItems,
IQuestRepository questItems)
{
_heroItems = heroItems;
_questItems = questItems;
}

[HttpGet]
public async Task<IActionResult> Index()
{
var recentHeroesVM = await _heroItems.GetRecentHeroesAsync(2);
ViewBag.QuestSelectList = await _questItems.GetSelectListAsync();
return View(recentHeroesVM);
}
}

我的测试类:

public class HomeController_Index
{
[Fact]
public async Task Index_ReturnsAViewResult_WithAListOfRecentHeros()
{
// Arrange
var mockHeroRepo = new Mock<IHeroRepository>();
var mockQuestRepo = new Mock<IQuestRepository>();
var recentHerosCount = 2;
mockHeroRepo.Setup
(
repo => repo.GetRecentHerosAsync(recentHerosCount))
.Returns(Task.FromResult(GetTestItems())
);
var controller = new HomeController(mockHeroRepo.Object, mockQuestRepo.Object);

// Act
var result = await controller.Index();

// Assert
var viewResult = Assert.IsType<ViewResult>(result);

// No definition error below.
var questSelectListVB = Assert.IsAssignableFrom<SelectList>(
viewResult.ViewBag.QuestSelectList);
}

private IEnumerable<HeroViewModel> GetTestItems()
{
var items = new List<HeroViewModel>
{
new HeroViewModel
{
Name = "First Hero",
},
new HeroViewModel
{
Name = "Second Hero",
},
};
return items;
}
}

问题1:为什么没有ViewBag属性(property) ViewResultViewResult 的 ASP.NET MVC 版本中时显然有一个类(MSDN)?

问题 2:我应该如何测试 ViewBag当我无法访问它时?

最佳答案

问题 1:对我来说仍然是个谜。更像是核心开发人员的问题。

问题2:

"The ViewBag property is a wrapper around ViewData that provides a dynamic view over that collection. It is not a separate collection." - ASP.NET Core Docs

所以它是一个对象。由于 ViewResult 中没有 ViewBag 属性(提醒 - 我们在这里谈论的是 Core 版本),请在 ViewData 字典样式中访问它:

var questSelectListVB = Assert.IsAssignableFrom<SelectList>(viewResult.ViewData["QuestSelectList"]);

关于c# - 如何在 ASP.NET Core 中对 ViewBag 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com