私はすでにこれを読んで解決策を試しましたが、うまくいきませんでした。私はこれを理解しようとしていますが、おそらくこれを適切にテストしていません。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 は常に null です...これが他の誰かにとって機能する場合は、ローカルのセットアップまたは使用するフレームワークに関係していると思います。私のショップで別の開発者にこれをテストしてもらいましたが、彼も同じ例外を受けました。
編集:この特定のプロジェクトに固有の問題に絞り込みました。新しいプロジェクトをソリューションに追加し、同じテストでテストすることで、この問題を再現できません。言うまでもなく、これは 2009 年に MVC 1 プロジェクトとして開始された継承プロジェクトであり、MVC 3 にアップグレードされました。次に、プロジェクト レベルの設定を見ていきます。
EDIT : 以下の回答を参照してください。以前に雇ったコンサルタントが、プロジェクトを MVC 4 にアップグレードしようとして、いくつかの問題に遭遇し、ファイルを元に戻すことはありませんでした。ほとんどの単体テストは合格し、プロジェクトは正常に実行されましたが、NUnit プロジェクトには MVC 4 への不適切な参照がありました。.csproj
ファイルから参照を手動で削除し、VS でそれを再読み込みする必要があり、すべてが機能しました。