Asp.net mvc 基于模拟控制器创建操作

Asp.net mvc 基于模拟控制器创建操作,asp.net-mvc,unit-testing,mocking,moq,Asp.net Mvc,Unit Testing,Mocking,Moq,我使用以下测试方法来测试控制器 [TestMethod()] public void ResetTest() { var target = new Mock<PROJECT.Reset.Controllers.ResetController>(); //var target = new PROJECT.Reset.Controllers.ResetController(); FormCollection form =

我使用以下测试方法来测试控制器

[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);
    }
[TestMethod()]
公共无效重置测试()
{
var target=new Mock();
//var target=new PROJECT.Reset.Controllers.ResetController();
FormCollection表单=新建FormCollection();
表单集(“用户名”、“域\\用户名”);
表单设置(“密码”、“testpass123”);
表单集(“confirmpassword”、“testpass123”);
ViewResult预期值=新的ViewResult();
expected.ViewName=“重置”;
expected.ViewData.Model=rm;
ActionResult动作=target.Object。;
action=target.Object.Reset(表单);
ViewResult实际=(ViewResult)操作;
断言.AreEqual(预期、实际);
}
如果我使用:

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

然后该操作将被计算为null。如果我将其更改为未注释的代码行下面的代码行,则将设置操作。你知道是什么导致了这种行为吗?

你为什么要嘲笑这种行为?这似乎是您实际的SUT(测试中的解决方案)。所以,你根本不应该嘲笑它

您对模拟框架的理解可能不正确。您不应该模拟要测试的对象(在您的案例中是控制器对象)。只能对依赖项对象进行模拟

例如:存储库对象等