asp.net-mvc-3 – 如何使用ModelMetadata单元测试modelbinder
发布时间:2020-05-23 13:34:05 所属栏目:asp.Net 来源:互联网
导读:如何单元测试自定义的ModelBinder? 这是代码。 public class MagicBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
|
如何单元测试自定义的ModelBinder? 这是代码。 public class MagicBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)
{
var boundModelObject = base.BindModel(controllerContext,bindingContext);
var properties = bindingContext.ModelType.GetProperties().Where(a => a.CanWrite);
foreach (var propertyInfo in properties)
{
object outValue = null;
bindingContext.TryGetValue(propertyInfo.Name,propertyInfo.DeclaringType,out outValue);
propertyInfo.SetValue(boundModelObject,outValue,null);
}
return boundModelObject;
}
}
这里是测试脚本。 [TestMethod]
public void TestFooBinding()
{
var dict = new ValueProviderDictionary(null)
{
{"Number",new ValueProviderResult("2","2",null)},{"Test",new ValueProviderResult("12","12",};
var bindingContext = new ModelBindingContext() { ModelName = "foo",ValueProvider = dict};
var target = new MagicBinder();
Foo result = (Foo)target.BindModel(null,bindingContext);
}
public class Foo
{
public int Number { get; set; }
public int Test { get; set; }
}
问题?在MagicBinder中,bindingContext.Model为null。如果我尝试设置它 那么如何构建ModelMetadata?它甚至不能被嘲笑。 解决方法尝试这样:[TestMethod]
public void TestFooBinding()
{
// arrange
var formCollection = new NameValueCollection
{
{ "Number","2" },{ "Test","12" },};
var valueProvider = new NameValueCollectionValueProvider(formCollection,null);
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null,typeof(Foo));
var bindingContext = new ModelBindingContext
{
ModelName = "",ValueProvider = valueProvider,ModelMetadata = metadata
};
var controllerContext = new ControllerContext();
var sut = new MagicBinder();
// act
Foo actual = (Foo)sut.BindModel(controllerContext,bindingContext);
// assert
// TODO:
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何将ms显示从LHS移动到RHS
- asp.net – 如何在隐藏字段(TextBox)上触发RequiredFieldVa
- asp.net-mvc – HttpContext中需要什么来允许FormsAuthenti
- asp.net-mvc – 控制器中的模拟服务器
- asp.net – 在JavaScript中访问asp:hiddenfield控件
- AspNetCore.Authentication.JwtBearer失败,没有SecurityTok
- .net – 我应该如何设计一个允许IoC的类库,但不依赖于特定的
- asp.net – 如何将流excel文件转换为数据表C#?
- asp.net – SignalR/signalr/hubs 404未找到
- asp.net – 模型项的类型为CookMeIndexViewModel,但需要一个
推荐文章
站长推荐
- asp.net – aspnet的最大值:MaxHttpCollectionK
- asp.net – 休闲网站的密码规则
- asp.net – 通过MSMQ分离Web和数据库层是必要的还
- ASP.NET MVC 3 Ajax.BeginForm和Html.TextBoxFor
- asp.net-mvc-3 – 如何将复选框绑定到mvc3中的vi
- asp.net-mvc – 从MVC版本1迁移后,ASP.NET MVC 2
- asp.net-mvc – Web API 2需要使用尾部斜杠来使自
- asp.net-mvc – 在ASP.NET身份中角色与声明的最佳
- IIS 7.5 ASP.NET-4 Gzip压缩
- asp.net-mvc – 如何使用jQuery UI Datepicker与
热点阅读
