加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

nunit – 单元测试时不会自动验证模型

发布时间:2020-12-16 09:59:20 所属栏目:asp.Net 来源:网络整理
导读:这是控制器动作的一部分: [HttpPost]public ActionResult NewComplaint(Complaint complaint){ if(!ModelState.IsValid) { // some code } // some more code...} 运行应用程序时,甚至在调用if语句之前会自动验证模型.但是,在尝试对此代码进行单元测试时,不
这是控制器动作的一部分:

[HttpPost]
public ActionResult NewComplaint(Complaint complaint)
{
    if(!ModelState.IsValid)
    {
        // some code
    }
    // some more code...
}

运行应用程序时,甚至在调用if语句之前会自动验证模型.但是,在尝试对此代码进行单元测试时,不会发生自动验证.

如果我使用FormCollection并调用TryUpdateModel,则会进行验证,但我不想使用它.

我发现在if语句之前调用TryValidateModel(model)可以很好地解决问题;只需要一行额外的代码.我宁愿摆脱它??.

任何想法为什么在单元测试时不会发生自动验证但在应用程序运行时发生?

编辑:忘了提,我正在使用ASP.NET MVC3 RC1,我正在嘲笑控制器的HTTPContext对象,如果这有任何区别

解决方法

在模型绑定期间进行验证(并且TryUpdateModel执行模型绑定).

但我认为问题在于您尝试测试的是MVC框架(即在调用操作方法之前进行验证的事实).你不应该测试.

您应该假设该部分正常工作(因为我们对其进行了广泛测试)并且仅测试您的应用程序代码.因此,在这种情况下,您需要模拟的唯一事情是ModelState.IsValid的返回值,您可以通过手动添加验证错误来实现:

ModelState.AddModelError("some key","some error message")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读