2013-06-25 224 views
0

我已经阅读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中读取它,并且一切正常。

回答

2

确保您的NUnit项目引用与您的MVC项目相同版本的System.Web.Mvc.dll。

+0

你打败了我。我在10分钟前刚刚发现了这个消息,当我看到你的消息时正在写一个答案。 – akousmata

+0

我已经失去了一天试图找到一个解决方案。谢谢你的回答。 – elector

相关问题