我已经阅读了这篇文章并尝试了解决方案,但它对我不起作用。我试图理解这一点,也许我没有正确地测试它。我NullReferenceException
正在测试 ModelState 的控制器中上线。我正在使用带有 NUnit 的 MVC 3 作为我的测试套件。 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 中读取它,一切正常。