在我的应用程序有我在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);
 }

使用这个单元测试控制器结束了使用DefaultModelBinder。我可以添加在本次测试以确保控制器使用自定义的模型绑定?

有帮助吗?

解决方案

斯科特Hanselman的取得与此相关的一个,而前一篇博客文章:

分裂日期时间 - 单元测试ASP.NET MVC定制模型绑定

这将你感兴趣的部分是在后的“测试自定义模型绑定”下的底部。基本上你实例化一个ModelBindingContext,然后在您的模型绑定器传递所创建的ModelBindingContext(和如果需要的话,控制器上下文)实例化模型绑定器和调用bind()。

下面是SO另一个问题也包含了你所需要的信息(即使你不使用MOQ):

如何进行单元测试使用起订量自定义模型绑定器<? / A>

scroll top