2016-09-27 77 views
0

在VS 2015测试模型是有效

这里上的Web应用程序的工作,MVC 5我的模型:

public class InfoFormulaireEmployeModele 
{ 
    [Required(ErrorMessage =" *You must provide a date")] 
    [RegularExpression("^[0-9]{8}$", ErrorMessage ="The date must be of the format AAAAMMJJ")] 
    public string dateEvenementInitial { get; set; } 
} 

当我尝试输入一些无效的输入,让我们说“12AB”,它工作正常,我回到页面上的错误消息。

这是我的观点:

@using PortailLibreService.Models 
@model InfoFormulaireEmployeModele 
@{ 
    ViewBag.Title = "ChampsFormulaireInvalidite"; 
} 

@using (Html.BeginForm()) 
{ 
    <div class="editor-field"> 
     <b>Initial event </b><br> 
     <p>When did the initial event occured?</p> 
     @Html.TextBoxFor(x => x.dateEvenementInitial, new { @placeholder = "AAAAMMJJ" }) @Html.ValidationMessageFor(x => x.dateEvenementInitial, null, new { @class = "error" }) 
    </div> 
    <input type="submit" name="Save" value="Submit" /> 
} 

我想创建一个单元测试,以确保我的模型不会是有效与无效日期条目。

这里是我的单元测试:

[TestMethod] 
public void testRetourPossibleInvalide() 
{ 
    InfoFormulaireEmployeModele modelDuplicat = new InfoFormulaireEmployeModele(); 

     modelDuplicat.dateEvenementInitial = "abc"; 


     InvFormController controlleur = lib.getController("100237"); 
     var result = controlleur.ChampsFormulaireInvalidite(modelDuplicat); 
     Assert.AreEqual(false, controlleur.ModelState.IsValid); 
} 

出于某种原因,测试失败,controlleur.ModelState.IsValid是真实的,而应该是假的。如果我只用数值测试它就没问题。例如,该测试通过:

[TestMethod] 
public void testRetourPossibleInvalide() 
{ 
    InfoFormulaireEmployeModele modelDuplicat = new  InfoFormulaireEmployeModele(); 

    modelDuplicat.dateRetourPossible = "129"; 
    InvFormController controlleur = lib.getController("100237"); 
    var result = controlleur.ChampsFormulaireInvalidite(modelDuplicat); 
    Assert.AreEqual(false, controlleur.ModelState.IsValid); 
} 

controlleur.ModelState.IsValid是假运行测试,同时,使测试通过。

我试图把一个断点我控制器的方法内,但在调试时我不能达到它..

+0

在检查modelstate.isvalid状态之前,您必须针对您的模型调用controlleur.valid。 –

+0

有没有这样的事情controlleur.valid –

+0

如果它的日期,那么为什么在世界上你使用'字符串'而不是'DateTime' –

回答

0

你将不得不充当框架,通常做所有的检查你。

[TestMethod] 
public void testRetourPossibleInvalide() { 
    var model = new InfoFormulaireEmployeModele(); 

    model.dateEvenementInitial = "abc"; 

    var controller = new InvFormController(); 

    var bindingContext = new ModelBindingContext() { 
     ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, model.GetType()), 
     ValueProvider = new NameValueCollectionValueProvider(new NameValueCollection(), CultureInfo.InvariantCulture) 
    }; 
    var boundModel = new DefaultModelBinder().BindModel(new ControllerContext(), bindingContext); 

    controller.ModelState.Clear(); 
    controller.ModelState.Merge(bindingContext.ModelState); 

    var result = controller.ChampsFormulaireInvalidite(model); 

    Assert.AreEqual(false, controller.ModelState.IsValid); 
}