gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 2 中的单元测试自定义模型绑定(bind)器

转载 作者:行者123 更新时间:2023-12-03 11:49:00 24 4
gpt4 key购买 nike

我在项目中编写了自定义模型绑定(bind)器,它使用 ASP.NET MVC 2。这个模型绑定(bind)器只绑定(bind)模型的 2 个字段:

public class TaskFormBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.Name == "Type")
{
var value = bindingContext.ValueProvider.GetValue("Type");
var typeId = value.ConvertTo(typeof(int));
TaskType foundedType;
using (var nhSession = Domain.GetSession())
{
foundedType = nhSession.Get<TaskType>(typeId);
}
if (foundedType != null)
{
SetProperty(controllerContext, bindingContext, propertyDescriptor, foundedType);
}
else
{
AddModelBindError(bindingContext, propertyDescriptor);
}
return;
}
if (propertyDescriptor.Name == "Priority")
{ /* Other field binding ... */
return;
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}

如何使用标准 VS 单元测试来测试这个模型绑定(bind)器?花了几个小时谷歌搜索,找到几个例子( http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx),但这个例子是针对 MVC1 的,在使用 MVC2 时不起作用。

我感谢您的帮助。

最佳答案

我修改了Hanselman's MVC 1 example测试 ASP.Net MVC 2 模型绑定(bind)器...

[Test]
public void Date_Can_Be_Pulled_Via_Provided_Month_Day_Year()
{
// Arrange
var formCollection = new NameValueCollection {
{ "foo.month", "2" },
{ "foo.day", "12" },
{ "foo.year", "1964" }
};

var valueProvider = new NameValueCollectionValueProvider(formCollection, null);
var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(FwpUser));

var bindingContext = new ModelBindingContext
{
ModelName = "foo",
ValueProvider = valueProvider,
ModelMetadata = modelMetadata
};

DateAndTimeModelBinder b = new DateAndTimeModelBinder { Month = "month", Day = "day", Year = "year" };
ControllerContext controllerContext = new ControllerContext();

// Act
DateTime result = (DateTime)b.BindModel(controllerContext, bindingContext);

// Assert
Assert.AreEqual(DateTime.Parse("1964-02-12 12:00:00 am"), result);
}

关于asp.net-mvc - ASP.NET MVC 2 中的单元测试自定义模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com