asp.net-mvc - ASP.NET MVC Controller 单元测试令人困惑

标签 asp.net-mvc unit-testing

我一直在阅读有关单元测试 Controller 逻辑的正确方法的各种教程。采取以下行动:

    public ActionResult Login()
    {
        //Return the index view if we're still here
        return View();
    }

坊间流传的说法是连接一个与此类似的测试方法:

    [TestMethod]
    public void TestLoginView()
    {
        //Set up an instance of the controller
        var thisController = new UserController();

        //Invoke the index action
        var actionResult = (ViewResult)thisController.Login();

        //Validate the test
        Assert.AreEqual("Login", actionResult.ViewName);
    }

断言按预期工作。然而,这个 Controller 有一个基类,它重写 OnActionExecuting 函数,以便设置各种页面元素镶边(导航元素、面包屑等),这一点逻辑永远不会被触发。

我可以轻松测试 Controller 中使用的模型,但是我想在 Controller 层进行测试。有想法吗?

最佳答案

测试框架仅调用被测的特定方法,它不会模仿 ASP.NET MVC 框架并触发通常会发生的所有事件。我会在单独的测试中测试您的 OnActionExecuting 逻辑,以确保它有效。此测试应该仅测试关联 Controller 方法中的功能。如果您对其他事件触发有特定的期望,则需要在调用 Controller 方法之前在 Controller 上下文中模拟这些事件。

关于asp.net-mvc - ASP.NET MVC Controller 单元测试令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/357604/

相关文章:

c# - Azure AD B2C - 角色管理

c# - 使用现有 Webforms 站点运行 MVC

angularjs - AngularJS 项目中的 Grunt Karma 单元任务失败

c# - 我应该在单元测试中使用 AutoMapper 吗?

python - SciPy/pytest : Skip specific test

python - 无法在 Flask 单元测试中设置 session 变量

c# - 使用 MVC 6 EF 将数据传递到 View

asp.net-mvc - 来自 ASP.NET Core MVC 的 POST/PUT Web API 调用上的 502 错误网关

javascript - 在 asp.net mvc 中使用 foreach 时如何设置事件 li?

c++ - 如何期待稍后创建的指针参数