0

我已经阅读了这篇文章并尝试了解决方案,但它对我不起作用。我试图理解这一点,也许我没有正确地测试它。我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 中读取它,一切正常。

4

1 回答 1

2

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

于 2013-06-26T16:03:26.310 回答