gpt4 book ai didi

asp.net-mvc - 单元测试我的 Controller 方法会导致一个空的 ViewName?

转载 作者:行者123 更新时间:2023-12-03 10:15:39 24 4
gpt4 key购买 nike

我正在对我的标准进行一些简单的 MS 单元测试,没有什么特殊的 Controller 。

当我查看 ViewName属性,来自返回的 ViewResult对象,它是 "" (空的)。

我的印象是 ViewNameView 的名称暗示(作为 suggested by this MS article 在 ASP.NET MVC Controller 测试中)。

顺便说一句,当我测试 ViewData 时,它都在那里并且是正确的。

这是我的代码...

public ActionResult Index(int? page, string tag)
{
if (page == null || page <= 0)
{
page = 1;
}

var viewData = new IndexViewData
{
... my property setters, etc ...
};
return View(viewData);
}

[TestMethod]
public void Index_Action_Should_Return_Index_View_For_Default_HomePage()
{
// Arrange.
var controller = PostController; // Wrapper, cause I use D.I.

// Act.
ViewResult viewResult = controller.Index(null, null) as ViewResult;

// Assert.
Assert.IsNotNull(viewResult);
Assert.AreEqual("Index", viewResult.ViewName); // This is false/fails.

var indexViewData = viewResult.ViewData.Model as IndexViewData;
Assert.IsNotNull(indexViewData); // This is true.
}

最佳答案

ViewName 仅在您在 ViewResult 中设置时才存在。如果您的 View 名称与您的 Controller 名称匹配,那么我将检查以确保 ViewName 为空或空,因为这将是(IMO)正确的行为,因为您不想在 View 上设置名称。我只在我打算返回的 View 与操作不匹配时检查 ViewName 是否设置 - 例如,当返回“错误” View 时。

编辑 :以下是ViewResultBase.cs 中ExecuteResult 的来源(来自RC1,我的Macintosh 上没有RTW 的来源)。如您所见,它会检查 ViewName 是否已直接设置,如果没有,则从 Controller 上下文的路由数据中的操作中提取它。这仅发生在 ExecuteResult 中,它在您的 Controller 操作完成后被调用。

    public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
if (String.IsNullOrEmpty(ViewName)) {
ViewName = context.RouteData.GetRequiredString("action");
}

ViewEngineResult result = null;

if (View == null) {
result = FindView(context);
View = result.View;
}

ViewContext viewContext = new ViewContext(context, View, ViewData, TempData);
View.Render(viewContext, context.HttpContext.Response.Output);

if (result != null) {
result.ViewEngine.ReleaseView(context, View);
}
}

关于asp.net-mvc - 单元测试我的 Controller 方法会导致一个空的 ViewName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/718464/

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