我有一个ASP MVC 3应用程序,在我的模型我已经实现了IValidatableObject。
当我的控制器发布创建或编辑时,我显然只想@R_60_301@,如果它是有效的。
我看到很多博客和帖子和答案,说的话
- if(!ModelState.IsValid)
- {
- return View();
- }
我的问题。为什么ModelState.IsValid在Controller的单元测试中始终为真?
例:
- [Test]
- public void InValidModelsAreNotAdded()
- {
- var invalidModel = new MyModel() { SomeField = "some data",SomeOtherField = "" };
- var result = _controller.Submit(invalidModel);
- _repository.AssertWasNotCalled(r => r.Add(Arg.Is.Anything));
- }
型号代码:
- public class MyModel : IValidatableObject
- {
- public string SomeField { get; set; }
- public string SomeOtherField { get; set; }
- public IEnumerable Validate(ValidationContext validationContext)
- {
- if(string.IsNullOrWhiteSpace(SomeOtherField))
- {
- yield return
- new ValidationResult("Oops invalid.",new[] {"SomeOtherField"});
- }
- }
- }
AssertWasNotCalled始终未能通过此测试。
我通过测试,注意到这个测试的ModelState.IsValid是真的。就好像没有调用IValidatableObject.Validate一样。当我运行该项目时,它似乎工作,但这并不是一个方法来测试驱动应用程序。
此外,我意识到我可以使用[必需]属性作为我的例子,但我的真实代码有更复杂的验证。
思考?