测试模型是有效
问题描述:
在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是假运行测试,同时,使测试通过。
我试图把一个断点我控制器的方法内,但在调试时我不能达到它..
答
你将不得不充当框架,通常做所有的检查你。
[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);
}
在检查modelstate.isvalid状态之前,您必须针对您的模型调用controlleur.valid。 –
有没有这样的事情controlleur.valid –
如果它的日期,那么为什么在世界上你使用'字符串'而不是'DateTime' –