gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:31:34 25 4
gpt4 key购买 nike

这是 Controller 操作的一部分:

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

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

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

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

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

编辑:忘了提,我正在使用 ASP.NET MVC3 RC1,如果这有什么不同,我正在模拟 Controller 的 HTTPContext 对象

最佳答案

验证发生在模型绑定(bind)期间(并且 TryUpdateModel 执行模型绑定(bind))。

但我认为问题在于您要测试的是 MVC 框架(即验证发生在调用操作方法之前的事实)。你不应该测试那个。

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

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

关于nunit - 单元测试时模型不会自动验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4396094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com