我已经阅读this,并尝试解决方案,它不适合我。我正试图理解这一点,也许我没有正确测试。我正在测试ModelState的控制器上正在执行NullReferenceException
。我使用NUnit作为我的测试套件的MVC 3。 ShouldBeViewNamed("Index")
是我写的测试视图名称的扩展方法,但我在执行代码时甚至没有那么远。这里是我的控制器:运行单元测试时,为什么我的ModelState为空?
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中读取它,并且一切正常。
你打败了我。我在10分钟前刚刚发现了这个消息,当我看到你的消息时正在写一个答案。 – akousmata
我已经失去了一天试图找到一个解决方案。谢谢你的回答。 – elector