在我的应用程序中,我有一个自定义模型绑定器,我在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。我可以在此测试中添加什么来确保控制器使用自定义模型绑定器?
答案 0 :(得分:3)
Scott Hanselman不久前发表了一篇与此相关的博客文章:
Splitting DateTime - Unit Testing ASP.NET MVC Custom Model Binders
您感兴趣的部分位于“测试自定义模型活页夹”下的帖子底部。基本上你实例化一个ModelBindingContext,然后实例化你的Modelbinder并在Modelbinder上调用Bind()传入你创建的ModelBindingContext(如果需要的话还有控制器上下文)。
这是SO的另一个问题,它还包含您需要的信息(即使您没有使用Moq):