我已经阅读this并尝试了解决方案,但它对我不起作用。我试图理解这一点,也许我没有正确地测试它。我在控制器中的行上获得NullReferenceException
,我正在测试ModelState。我使用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中读取它,一切正常。< / p>
答案 0 :(得分:2)
确保您的NUnit项目引用与您的MVC项目相同版本的System.Web.Mvc.dll。