2016-04-16 20 views
0

正確には、引数例外が厳しいことをテストする必要があります。メソッドの例外が酷いことを理解することは本当に可能ですか?try/catchを使用すると単体テストが失敗する

public JsonResult Create(TeamViewModel teamViewModel) 
    { 
     JsonResult result = null; 
      try 
      { 
       // here exception throws 
       var domainTeam = teamViewModel.ToDomain(); 
        ... 
      } 
      catch (ArgumentException ex) 
      { 
       this.ModelState.AddModelError(string.Empty, ex.Message); 
       result = this.Json(this.ModelState); 
      }   

     return result; 
    } 

この方法のための私のユニットテスト:

public void Create_InvalidTeamAchievements_ArgumentExceptionThrown() 
{ 
    Exception exception = null; 
    string invalidAchievements = CreateInvalidTeamAchievements(); 

    // Arrange 
    var viewModel = new TeamMvcViewModelBuilder().WithAchievements(invalidAchievements).Build(); 
    var sut = _kernel.Get<TeamsController>(); 

    // Act 
    try 
    { 
     sut.Create(viewModel); 
    } 
    catch (ArgumentException ex) 
    { 
     exception = ex; 
    } 

    // Assert 
    VerifyExceptionThrown(exception, string.Format(Resources.ValidationTeamAchievements, 
       Constants.Team.MAX_ACHIEVEMENTS_LENGTH)); 
} 

答えて

6

あなたは間違った方法でそれをテストしています。 Createメソッド内で既に例外をキャッチしているので、例外をスローしないように機能をテストする必要があります。むしろ、にModelStateが含まれていると、Createメソッドで例外が発生した場合にエラーが発生するはずです。

+0

この時点まで、try catchを使用することは、通常、単体テストでは大きなノーとなりません。例外がスローされたことをテストする場合は、単に[ExpectedException]属性を追加します。 https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.expectedexceptionattribute.aspx – JCisar

関連する問題