【问题标题】:MVC moq unit test the object before RedirecToAction()MVC moq 在 RedirectTtoAction() 之前对对象进行单元测试
【发布时间】:2009-10-05 20:50:12
【问题描述】:

我想在“item”对象重定向到另一个动作之前测试它里面的数据。

     public ActionResult WebPageEdit(WebPage item, FormCollection form)
    {
        if (ModelState.IsValid)
        {

            item.Description = Utils.CrossSiteScriptingAttackCheck(item.Description);
            item.Content = Utils.CrossSiteScriptingAttackCheck(item.Content);
            item.Title = item.Title.Trim();
            item.DateUpdated = DateTime.Now;

           // Other logic stuff here

            webPagesRepository.Save(item);


            return RedirectToAction("WebPageList");
        }

这是我的测试方法:

[Test]
    public void Admin_WebPageEdit_Save()
    {

        var controller = new AdminController();

        controller.webPagesRepository = DataMock.WebPageDataInit();
        controller.categoriesRepository = DataMock.WebPageCategoryDataInit();

        FormCollection form = DataMock.CreateWebPageFormCollection();


        RedirectToRouteResult actionResult = (RedirectToRouteResult)controller.WebPageEdit(webPagesRepository.Get(1), form);
        Assert.IsNotNull(actionResult);

        Assert.AreEqual("WebPageList", actionResult.RouteValues["action"]);


        var item = ((ViewResult)controller.WebPageEdit(webPagesRepository.Get(1), form)).ViewData.Model as WebPage;

        Assert.NotNull(item);



        Assert.AreEqual(2, item.CategoryID);




    }

在这一行失败了:

var item = ((ViewResult)controller.WebPageEdit(webPagesRepository.Get(1), form)).ViewData.Model as WebPage;

我正在考虑是否有任何方法可以在“项目”对象重定向到其他操作之前对其进行测试?

【问题讨论】:

  • 请编辑您的问题以包括: 1:可能编译的代码(并非所有 WebPageEdit 的代码路径都返回一个值)。 2:您收到的错误的描述。

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


【解决方案1】:

您可能知道,它失败的原因是您的控制器操作从不返回 ViewResult,只返回一个 RedirectToRouteResult(假设您没有省略某些代码路径)。您可以在重定向到的操作中返回 ViewResult,但您不会在此处测试该操作。

在重定向之前确定和测试项目对象状态的最佳方法是与 webPagesRepository 对象的 Save() 方法进行交互。据推测,从测试方法的名称来看,您想测试该方法实际上是否被调用。因此,您应该对 Save() 方法有所期待。在这种期望下,您可以检查并断言传递给它的项目对象的状态。这假定您的 webPagesRepository 是一个模拟依赖项。

我是 Rhino Mocks 用户,因此只知道如何使用该 API 设置期望值。如果您觉得它有用,请告诉我,我会发布它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2012-06-01
    • 2021-10-15
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多