2012-04-26 5 views
0

продлить свою проверку, я создал свою собственную модель связующее на основе следующей статье: http://www.howmvcworks.net/OnModelsAndViewModels/TheBeautyThatIsTheModelBinderMVC модуль изменения ModelBinder тест

В моем приложении я выражаю Person сущность, как это:

[MetadataType (TypeOf (PersonMetaData))] общественного частичного класса Person {}

общественного класса PersonMetaData { [CustomRegularExpression (@ "(\ ш |.) + @ (\ ш |.) +", ErrorMessage = «Электронная почта является недействительным ")] public string Name; }

Мой global.asax выглядит следующим образом:

 protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

     //Change default modelbinding 
     ModelBinders.Binders.DefaultBinder = new CustomModelBinder(); 

    } 

Когда я называю создать событие для моей PersonController и при условии электронной почты недействителен, поле ModelState.Valid является ложным.

Теперь я хотел бы создать модульный тест для метода создания:

[TestInitialize()] 
    public void MyTestInitialize() 
    { 

     RegisterRoutes(RouteTable.Routes); 

     //Change default modelbinding 
     ModelBinders.Binders.DefaultBinder = new CustomModelBinder(); 

    } 
    /// <summary> 
    ///A test for Create 
    ///</summary> 
    // TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example, 
    // http://.../Default.aspx). This is necessary for the unit test to be executed on the web server, 
    // whether you are testing a page, web service, or a WCF service. 
    [TestMethod()] 
    public void CreateTest() 
    { 

     PersonController controller = new PersonController(); 
     Person Person = new Person(); 

     Person.Email = "wrognmail.de 

      var validationContext = new ValidationContext(Person, null, null); 
     var validationResults = new List<ValidationResult>(); 
     Validator.TryValidateObject(Person, validationContext, validationResults, true); 
     foreach (var validationResult in validationResults) 
     { 
      controller.ModelState.AddModelError(validationResult.MemberNames.First(), validationResult.ErrorMessage); 
     } 

     ActionResult actual; 
     actual = controller.Create(Person); 

     // Make sure that our validation found the error! 
     Assert.IsTrue(controller.ViewData.ModelState.Count == 1, "err."); 
    } 

Когда я отладки кода атрибут ModelState.Valid говорит мне, что нет никакой ошибки. Я считаю, что регистрация DefaultBinder не была успешной.

Как я могу зарегистрировать свой DefaultBinder в своем модульном тесте?

Спасибо!

ответ

0

Обратите внимание на вопрос this и ответ Дарина. Это способ протестировать модельное связующее, может вам помочь.

Смежные вопросы