1
我正在嘗試爲我的自定義模型綁定器創建一個測試,但沒有任何成功。對base.BindModel的調用總是返回null。有沒有辦法在使用LINQ to Entities時測試自定義綁定?在這種情況下,foo是帶有兩個字段的數據庫中的表格 - 數字和文本值。asp.net mvc和linq to entities:如何測試模型的自定義綁定?
fooBinder.cs:
public override Object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var obj = (foo)base.BindModel(controllerContext, bindingContext);
return obj;
}
我試圖做一個簡單的測試(有一個在這裏一些額外的碎片,我已經嘗試了許多不同的方法):
fooBinderTest.cs :
fooBinder binder;
ControllerContext controllerContext;
ModelBindingContext bindingContext;
[TestInitialize]
public void Initialize()
{
controllerContext = MockControllerContext().Object;
FormCollection form = new FormCollection
{
{"foo_A","2" },
{"foo_B", "FooB" }
};
var valueProvider = form.ToValueProvider();
bindingContext = new ModelBindingContext()
{
ModelState = new ModelStateDictionary(),
ModelType = typeof(foo),
ModelName = "foo",
ValueProvider = valueProvider
};
binder = new fooBinder();
}
public static Mock<ControllerContext> MockControllerContext()
{
var context = new Mock<ControllerContext>();
var sessionState = new Mock<HttpSessionStateBase>();
var response = new Mock<HttpResponseBase>();
var request = new Mock<HttpRequestBase>();
var serverUtility = new Mock<HttpServerUtilityBase>();
var form = new FormCollection
{
{"foo_A","2" },
{"foo_B", "FooB" }
};
context.Setup(c => c.HttpContext.Session).Returns(sessionState.Object);
context.Setup(c => c.HttpContext.Response).Returns(response.Object);
context.Setup(c => c.HttpContext.Request).Returns(request.Object);
context.Setup(c => c.HttpContext.Server).Returns(serverUtility.Object);
context.Setup(c => c.HttpContext.User.Identity.Name).Returns("Test");
context.Setup(c => c.HttpContext.Request.Form).Returns(form);
return context;
}
[TestMethod]
public void TestDefault()
{
foo myFoo = (foo)binder.BindModel(controllerContext, bindingContext);
Assert.IsNotNull(myFoo);
}
不幸的是,我們正在使用MVC 1. – chris 2009-11-30 18:45:04
您可以在MVC 1上做幾乎完全相同的事情;只有在構建ModelBindingContext時所設置的屬性發生變化。 – 2009-11-30 19:13:26
IIRC你設置'Model'而不是'ModelMetadata'。但已經有一段時間了。 – 2009-11-30 19:25:06