gpt4 book ai didi

asp.net-mvc-2 - 使用带有 MSpecMVC、RedirectToAction 和 ViewData 测试条件问题的 MSpec 设置测试

转载 作者:行者123 更新时间:2023-11-28 21:34:38 25 4
gpt4 key购买 nike

在我的 HomeController 中,我有以下内容:

 public ActionResult Index()
{
SetModuleTitle("Welcome");

return RedirectToAction( "DashBoard", "Home" );
}

并且 SetModuleTitle 在父类中定义如下:

public void SetModuleTitle(string title)
{
ViewData["ModuleTitle"] = string.Format("PM4 - {0}", title);
}

没什么好担心的。现在我正在尝试编写我的测试来测试 SetModuleTitle 方法:

 [Subject( typeof( HomeController ) )]
public class when_the_home_page_is_requested_by_logged_in_user_ : context_for_a_home_controller_for_logged_user
{
static ActionResult result;

Because of = () => result = HomeController.Index();

It should_set_the_module_title = () => ( ( ViewResult ) result ).ViewData[ "ModuleTitle" ].ShouldEqual( "PM4 - Dashboard" );
}

我正确地被告知

Unable to cast object of type 'System.Web.Mvc.RedirectToRouteResult' to type 'System.Web.Mvc.ViewResult'.

那么在那种情况下我该如何设置 MSpec 测试呢?

大卫

最佳答案

好吧,我想我已经明白我错在哪里了。但是,首先我必须提供

调用的代码

return RedirectToAction( "DashBoard", "Home" );

public ActionResult DashBoard()
{
SetModuleTitle("Dashboard");

return View();
}

所以,如果我的理解是正确的,在我的测试调用之后

Because of = () => result = HomeController.Index();

RedirectToAction 对象被返回并且代码执行停止在那里,即它不调用 RedirectToAction 中指定的 Controller 方法。这是有道理的,因为毕竟我们在这里做的是单元测试而不是集成测试。因此,在这里测试 SetModuleTitle 方法没有意义。

相反,应该实现代码来测试对方法 Dashboard 的调用:

[Subject(typeof(HomeController))]
public class when_the_dashboard_page_is_requested_by_logged_in_user : context_for_a_home_controller_for_logged_user
{
static ActionResult result;

Because of = () => result = HomeController.DashBoard();

It should_set_the_module_title = () =>
{
( ( ViewResult ) result ).ViewData[ "ModuleTitle" ].ShouldEqual( "PM4 - Dashboard" );
};

It should_return_the_dashboard_page = () =>
result.ShouldBeAView().And().ShouldUseDefaultView();
}

如果知识渊博的人可以否认、确认或以其他方式证明我的理解,那就太好了。

关于asp.net-mvc-2 - 使用带有 MSpecMVC、RedirectToAction 和 ViewData 测试条件问题的 MSpec 设置测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347383/

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