gpt4 book ai didi

asp.net-mvc-5 - 通过单元测试调用时, Controller 中的 MVC RouteData 为 null

转载 作者:行者123 更新时间:2023-12-02 01:29:23 25 4
gpt4 key购买 nike

当我的 Controller 正常运行时,会填充 RouteData。但是当我运行或调试测试时,RouteData 为空。 ASP.NET MVC5。

Controller

public class HomeController : Controller
{
public ActionResult Index()
{
var controller = this.RouteData.Values["controller"]; // null ref exception
var action = this.RouteData.Values["action"];
var id = this.RouteData.Values["id"];
ViewBag.Message = string.Format("{0}::{1} {2}", controller, action, id);
return View();
}

测试

[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Index()
{
HomeController controller = new HomeController();
ViewResult result = controller.Index() as ViewResult;
Assert.AreEqual(false, string.IsNullOrWhiteSpace(result.ViewBag.Message));
}

这是预期的吗?这是因为路由引擎在测试直接实例化 Controller 时不参与调用 Controller 吗?

最佳答案

是的,这是预期的。 Controller 依赖于 RequestContext 来获取 RouteData,并且仅在 created on the mvc pipeline 之后“准备就绪”和 controller request begins to execute .当您简单地新建它们时,这不会发生。

您可以做的是手动新建这些部分(即ControllerContextRouteData 等)或模拟它们然后设置这些属性在要测试的 Controller 上。

关于asp.net-mvc-5 - 通过单元测试调用时, Controller 中的 MVC RouteData 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019284/

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