代码之家  ›  专栏  ›  技术社区  ›  Sailing Judo

使用自定义模型绑定器对控制器进行单元测试

  •  0
  • Sailing Judo  · 技术社区  · 15 年前

    在我的应用程序中,我有一个自定义模型绑定器,在global.asax中设置为defaultbinder:

     ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();
    

    在为控制器编写单元测试时,我需要确保控制器使用自定义模型绑定器,但我不知道如何这样做。

    我的测试如下:

     [Test]
     public void Details_Post_Action_Fails_To_Change_Email_Address_With_Duplicate()
     {
         // Setup
         var controller = new AccountController();
         controller.SetFakeControllerContext();
    
         var param = Customer.Load(30005);
         param.EmailAddress = "foo@bar.com";
    
         // Test
         var result = controller.Details(param);
    
         // Assert
         Assert.IsTrue(result is ViewResult);  // will be ViewResult if failed....
         Assert.IsFalse(((ViewResult)result).ViewData.ModelState.IsValid);
     }
    

    通过这个单元测试,控制器最终使用的是默认的ModelBinder。我可以在这个测试中添加什么来确保控制器使用自定义模型绑定器?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Community kfsone    7 年前

    斯科特·汉塞尔曼不久前发表了一篇与此相关的博客:

    Splitting DateTime - Unit Testing ASP.NET MVC Custom Model Binders

    您感兴趣的部分位于文章底部的“测试自定义模型绑定器”下。基本上,您要实例化一个modelbindingContext,然后实例化您的modelbinder,并在传递您创建的modelbindingContext(和控制器上下文,如果需要)的modelbinder上调用bind()。

    这里还有一个问题,它也包含了您需要的信息(即使您没有使用MOQ):

    How to Unit Test a custom ModelBinder using Moq?