【问题标题】:Creating an action based on a mocked controller基于模拟控制器创建动作
【发布时间】:2013-03-28 02:54:08
【问题描述】:

我有以下用于测试控制器的测试方法。

[TestMethod()]
    public void ResetTest()
    {
        var target = new Mock<PROJECT.Reset.Controllers.ResetController>();
        //var target = new PROJECT.Reset.Controllers.ResetController();


        FormCollection form = new FormCollection();
        form.Set("username","domain\\username");
        form.Set("password","testpass123");
        form.Set("confirmpassword","testpass123");

        ViewResult expected = new ViewResult();
        expected.ViewName = "Reset";
        expected.ViewData.Model = rm;
        ActionResult action = target.Object.;

        action = target.Object.Reset(form);
        ViewResult actual = (ViewResult)action;            
        Assert.AreEqual(expected, actual);
    }

如果我使用:

var target = new Mock<PROJECT.Reset.Controllers.ResetController>(); 

然后该操作被评估为空。如果我将其更改为未注释的代码行下方,则正在设置操作。有什么想法可能导致这种行为吗?

【问题讨论】:

    标签: asp.net-mvc unit-testing mocking moq


    【解决方案1】:

    你为什么嘲笑这个?看来这是您的实际 SUT(正在测试的解决方案)。所以,你根本不应该嘲笑它。

    【讨论】:

      【解决方案2】:

      您对 Mocking 框架的理解可能不正确。您不应模拟要测试的对象(在您的情况下为控制器对象)。您可以/仅对依赖对象进行模拟。

      例如:存储库对象等

      【讨论】:

        猜你喜欢
        • 2012-09-25
        • 2011-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        相关资源
        最近更新 更多