2016-11-28 8 views
0

nullのMVCコントローラアクションパラメータをテストする価値はありますか?有効な値がアクションに渡されることを保証することが目的であり、nullも可能性があります。C#ユニットテストMVCコントローラNull値のアクションパラメータ

[HttpPost] 
    public ActionResult Create(ContactViewModel viewModel) 
    { 
     if (!ModelState.IsValid) 
      return View("Create", viewModel); 

     if (viewModel == null) 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "No data received"); 

     var contact = Mapper.Map<Contact>(viewModel); 

     //contact.UserId = User.Identity.GetUserId(); 
     contact.UserId = _user.Id; 

     _unitOfWork.Contacts.Add(contact); 

     _unitOfWork.Complete(); 

     return RedirectToAction("Index"); 
    } 

そして、nullパラメータをチェックするための私のテスト:ここ

は、コントローラのアクションです

[TestMethod] 
    public void CreatePost_NullViewModelPassed_ShouldReturnBadRequest() 
    { 
     var result = _controller.Create(null) as HttpStatusCodeResult; 
     result.StatusCode.Should().Be(400); 
    } 

上記のテストは常に渡しますが、これは有用な試験ですか?私はポストマンとPOSTメソッドをヒットしようとしているが、私は私のCreateアクションのHttpGetバージョンを取得:あなたが書いている

public ViewResult Create() 
    { 
     return View("Create", new ContactViewModel()); 
    } 
+0

テスト中のメソッドのいくつかのロジックを表示 – Nkosi

+3

問題に関連するコードをさらに提供する必要があります。できるだけ小さい自己完結型の例を提供し、問題を再現してください。あなたのテストでは、できるだけ多くをカバーするようにしてください。あなたのクラス/メソッドがnull値を受け入れるならば(特にそのヌル値が実行の違いを意味する場合)、それをテストする必要があります。同様に、null値を受け入れるべきでない場合、メソッドは 'ArgumentNullException'(またはそれに類するもの)をスローしてテストする必要があります。 – gmiley

答えて

0

テストは、テスト対象システムの自信を与えるが、また、可能な場合は、バグを上げる必要があるが解決されるCreateメソッドでヌルチェックをしている場合は、システムがヌル値を受け取ったときに単に「死ぬ」だけでなく、ステータスコードを取得することで対応しているように応答する必要があります。 400(Bad Request)なので、全体的に私はこのテストが非常に有効であると言いたいと思います - 特にあなたがリポジトリ/サービスパターンのようなものを将来紹介するためにリファクタリングできる場所。

Createメソッドのテストでは、成功した呼び出しと失敗した呼び出しだけでなく、ビューモデル内のさまざまな値を呼び出すだけでなく、論理を変更する可能性のあるあらゆる組み合わせをカバーする必要があります特定の値に基づいて異なるタスクを実行する

悲しいことに、郵便配達でポストメソッドをヒットしたい場合は、URLの直前にMETHODをPOSTに変更してください。

+0

私は実際に私の質問の例で 'POST'メソッドでそれを試しました – Esen

+2

' [ValidateAntiForgeryToken] '属性がメソッドに適用されていますか? – ColinM

+0

私はそれを簡略化するための質問をする前に削除しましたが、それを元に戻して正しい処置を打ちました。ありがとうございました! – Esen

関連する問題