2010-07-19 3 views
3

코드 커버리지가 처음이며 코드 테스트에서 % 100의 단위 테스트를 수행하려고합니다.Visual Studio에서 예외를 처리하는 방법 코드 코드

내 첫 번째 질문은 가능한가/가능합니까? 내 둘째,보다 구체적인 질문은

, 나는 다음과 같은 방법이 있습니다

/// <summary> 
/// Clears frames, control groups, display groups 
/// </summary> 
public bool Clear() 
{ 
    try 
    { 
     this.Frames.Clear(); 
     this.ControlGroups.Clear(); 
     this.DisplayGroups.Clear(); 
     return true; 
    } 
    catch (Exception ex) 
    { 
     Milltown.MTCore.mtException mtEx = new Milltown.MTCore.mtException((int)PFExceptions.Exception_Hidden_FuctionLevel, ex, 
     PFCommonVariables.ApplicationPlatform, PFCommonVariables.ApplicationDataSource, "PFSystem:Clear"); 
     return false; 
    } 

} 

이 방법에 대한 나의 단위 테스트는 다음과 같습니다

//System Clear Test 
Assert.IsTrue(MySystem.Clear()); 
Assert.AreEqual(0,MySystem.Frames.Count); 
Assert.AreEqual(0,MySystem.ControlGroups.Count); 
Assert.AreEqual(0, MySystem.DisplayGroups.Count); 

코드 범위가 나는 내부의 라인을 포함하고 있음을 보여줍니다 try 블록은 있지만 catch 블록은 아닙니다. catch 블록의 코드를 어떻게 처리 할 수 ​​있습니까?

+0

당신은'mtException'으로 무엇인가를하고자합니까? 예외를 작성해도 예외가 발생하거나 기록되지는 않습니다. –

+0

100 % 코드 커버리지는 가치가 떨어지지 만 수익이 감소 할 때까지 테스트 코드 및 대상 churn zip의 양을 80-90 % 정도 가깝게할수록 신속하게 역효과를 낼 수 있습니다. 어떤 시점에서 당신은 충분하다는 것을 충분히 말해야 만합니다. TMMV –

+0

@ John Saunders : 아마 mtException이 Exception의 인스턴스라고 가정합니다. –

답변

2

범위를 개선하는 것이 좋은 목표입니다. 100 % 숫자에 너무 집중하지 마십시오. 오해의 소지가 있습니다. 더 많은 커버리지가 덜한 것보다 낫지 만, 100 %에서도 코드의 많은 부분을 놓칠 수 있습니다 (파이썬에서의 예제는 http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html 참조). 그리고 보험의 마지막 5 %는 당신이 원하는만큼 말할 수 없을지도 모릅니다.

귀하의 예외는 귀하의 방법 중 하나에서 예외를 던지도록하는 방법이 필요합니다. 이렇게하는 일반적인 방법은 특정 구현에 묶이지 않고 테스트 중에 실제로 수행 할 하위 객체를 결정할 수 있도록 구현을 조롱하는 것입니다.

+1

++가 동의했습니다. 맹목적으로 100 % 적용 범위를 추구하면 털이 많은 손바닥과 아세토 민펜 습관이 생길 수 있습니다. ;-) –

+0

고마워요, 이것은 올바른 방향으로 나를 잡아줍니다. – sbenderli

2

가능합니다. 또한 달성하기가 매우 어려우며 모든 사람이 혜택이 비용보다 중요하다고 확신하지는 않습니다.

구체적인 목표를 달성하는 것과 관련하여 ExpectedExceptionAttribute을보고 테스트 설정에서 이러한 예외를 발생시키는 개체를 찾으십시오.

+0

감사! ExpectedExceptionAttribute 사용에 대해 자세히 살펴 보겠습니다. – sbenderli