从编写MVP测试转向MVC

时间:2009-06-08 15:52:34

标签: asp.net-mvc unit-testing

我正在迁移一个用MVP编写的webforms应用程序来利用MVC框架,并想知道我应该如何测试一个返回partialview的简单控制器动作。当使用MVP时,我会对view =期望值的每个属性断言为true。

正在测试的控制器行动

<OutputCache(Location:=OutputCacheLocation.None)> _
Function Edit(ByVal id As Integer) As ActionResult
    Dim Form As Form = mFormService.GetFormById(id)

    Return PartialView("Form", Form)
End Function

我要验证的是“视图”值在视图中正确显示(但这是我应该像使用MVP模式时那样测试的吗?)

1 个答案:

答案 0 :(得分:3)

您应该测试ViewModel及其中的数据。此外,您应该测试结果是否是您期望的结果类型(例如,在大多数情况下为ViewResult)。最后,您应该检查视图名称。

例如,这是对控制器操作的测试,该操作返回用于将新用户实体添加到现有公司的创建表单。公司的ID作为id参数提供给控制器:

        [Test]
        public void Create_Get_Shows_View()
        {
            //Setup    
            //setup Controller, fakes, mocks, etc... here

            //Execution
            var result = (ViewResult)Controller.Create(companyID);

            //Assertion
            var model = (UsersController.CreateViewModel) result.ViewData.Model;
            Assert.AreEqual("", result.ViewName);
            Assert.IsNotNull(model.User);
            Assert.AreEqual(companyID,model.CompanyID);
        }

编辑:您可能还想测试是否设置了正确的HttpVerb。你可以通过反思来做到这一点。