asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc-3 – ASP MVC 3测试控制器调用ModelState.IsValid总是返回true大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ASP MVC 3应用程序,在我的模型我已经实现了IValidatabLeobject。

当我的控制器发布创建或编辑时,我显然只想保存模型,如果它是有效的

我看到很多博客和帖子和答案,说的话

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一样。当我运行该项目时,它似乎工作,但这并不是一个方法来测试驱动应用程序。

此外,@R_616_10509@我可以使用[必需]属性作为我的例子,但我的真实代码有更复杂的验证。

解决方法

这是真的,因为你没有调用任何设置它的错误。

这通常发生在绑定期间,但是由于您只是直接在测试中传递模型,所以您完全跳过。

如果您正在尝试验证验证,请直接进行验证。如果您尝试测试控制器中的错误路径,则测试的安排可以调用_controller.ModelState.AddModelError(// …

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc-3 – ASP MVC 3测试控制器调用ModelState.IsValid总是返回true全部内容,希望文章能够帮你解决asp.net-mvc-3 – ASP MVC 3测试控制器调用ModelState.IsValid总是返回true所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。