单元测试与自定义模型粘合剂控制器
-
18-09-2019 - |
题
在我的应用程序有我在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):
不隶属于 StackOverflow