gpt4 book ai didi

c# - 单元测试 View 中设置的 ASP.NET MVC ViewBag 属性

转载 作者:行者123 更新时间:2023-12-04 10:13:43 26 4
gpt4 key购买 nike

我有各种需要测试的 ViewBags 是否设置正确。我从测试一个简单的 ViewBag.Title 开始,然后我将转移到其他实际传递动态数据的 ViewBag。

我正在尝试在 Create.cshtml 中测试这个 ViewBag.Title

@{
ViewBag.Title = "Create";
}

此 View 的预订 Controller :

    // GET: Booking/Create
public ActionResult Create()
{
return View();
}

我尝试了以下方法:

    [TestMethod]
public void BookingTest()
{
var controller = new BookingController();
var ar = controller.Create() as ViewResult;
Assert.AreEqual("Create", ar.ViewData["Title"]);
}

还试过:

    [TestMethod]
public void BookingTest()
{
var controller = new BookingController();
//var ar = controller.Create() as ViewResult;
Assert.AreEqual("Create", controller.ViewBag.Title);
}

两个单元测试都失败并返回以下内容:Message: Assert.AreEqual failed. Expected:<Create>. Actual:<(null)>.

谁能看出我做错了什么?

最佳答案

基于

@{
ViewBag.Title = "Create";
}

看起来您正在实际 View (即 cshtml)文件中设置 ViewBag

根据 ControllerView 的分离方式,单元测试将无法访问呈现的 View。 ActionResult(在本例中为 ViewResult)将由框架在运行时执行,以便将必要的数据传递给 View 。

要获得预期的行为,您必须从 Controller 分配 Title

Controller 操作:

public ActionResult Create() {
ViewBag.Title = "Create";
return View();
}

让您的测试按预期运行。

[TestMethod]
public void BookingTest() {
//Arrange
var controller = new BookingController();
string expected = "Create";

//Act
var result = controller.Create() as ViewResult;
var actual = (string) result.ViewData["Title"];

//Assert
Assert.AreEqual(expected, actual);
}

关于c# - 单元测试 View 中设置的 ASP.NET MVC ViewBag 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61187150/

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