为什么在运行单元测试时,我的ModelState为null
本文关键字:我的 ModelState null 运行 单元测试 为什么 | 更新日期: 2023-09-27 18:20:04
我已经阅读了这篇文章,并尝试了解决方案,但它对我不起作用。我正在努力理解这一点,也许我没有正确测试这一点。我在测试ModelState的控制器中得到了一个NullReferenceException
。我正在使用MVC 3和NUnit作为我的测试套件。ShouldBeViewNamed("Index")
是我编写的一个扩展方法,用于测试我要返回的视图的名称,但在执行代码时,我甚至没有做到这一点。这是我的控制器:
public class TestController : Controller
{
[HttpPost]
public ViewResult Index(TestModel model)
{
if(ModelState.IsValid) // results in a null reference exception.
return View();
return new ViewResult();
}
}
测试类别:
[TestFixture]
public class TestControllerTest
{
[Test]
public void TestingModelState()
{
// Arrange
var model = new TestModel();
var controller = new TestController();
// Arbitrary values to indicate an error in the model
controller.ModelState.AddModelError("tester1", "error happened");
// Act
var result = controller.Index(model);
// Assert
result.ShouldBeViewNamed("Index");
}
}
根据我读过的大多数博客,这应该"只是工作"。但无论我做什么,ModelState总是空的。。。如果这对其他人有效,我会认为这与我的本地设置或我们使用的框架有关。我让另一位开发人员在我的商店测试过这个,他也得到了同样的异常。
编辑:我已将问题缩小到特定于此特定项目。通过向解决方案中添加一个新项目并使用相同的测试进行测试,我无法重复此问题。不用说,这是一个2009年开始的继承项目,可能是一个MVC 1项目,已经升级到MVC 3。接下来我将查看项目级别的设置。
编辑:请参阅下面的答案,原来我们不久前聘请的一位顾问试图将项目升级到MVC 4,遇到了一些问题,并且从未恢复文件。大多数单元测试仍然通过,项目运行良好,但NUnit项目对MVC 4的引用不好。我不得不手动从.csproj
文件中删除引用,并在VS中读取它,一切都正常。
确保NUnit项目引用的System.Web.Mvc.dll版本与Mvc项目相同。