0

私はすでにこれを読んで解決策を試しましたが、うまくいきませんでした。私はこれを理解しようとしていますが、おそらくこれを適切にテストしていません。NullReferenceExceptionModelState をテストしているコントローラーでオンラインになっています。テスト スイートとして 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 は常に null です...これが他の誰かにとって機能する場合は、ローカルのセットアップまたは使用するフレームワークに関係していると思います。私のショップで別の開発者にこれをテストしてもらいましたが、彼も同じ例外を受けました。

編集:この特定のプロジェクトに固有の問題に絞り込みました。新しいプロジェクトをソリューションに追加し、同じテストでテストすることで、この問題を再現できません。言うまでもなく、これは 2009 年に MVC 1 プロジェクトとして開始された継承プロジェクトであり、MVC 3 にアップグレードされました。次に、プロジェクト レベルの設定を見ていきます。

EDIT : 以下の回答を参照してください。以前に雇ったコンサルタントが、プロジェクトを MVC 4 にアップグレードしようとして、いくつかの問題に遭遇し、ファイルを元に戻すことはありませんでした。ほとんどの単体テストは合格し、プロジェクトは正常に実行されましたが、NUnit プロジェクトには MVC 4 への不適切な参照がありました。.csprojファイルから参照を手動で削除し、VS でそれを再読み込みする必要があり、すべてが機能しました。

4

1 に答える 1