2011-09-22 4 views
0

PEX의 테스트 대상 코드를 단일 메서드로 제한 할 수 있습니까? 어셈블리와 클래스에 제약 할 수 있다는 것을 알고 있지만 멤버는 무엇입니까? 나는 단지이 가능한 1을 테스트하고 있습니다 때문에,테스트중인 PEX 코드를 단일 메서드로 제한 하시겠습니까?

public virtual bool GetLastSymbol(string symbolHint, out string symbol) 
{ 
    if (symbolHint == null) 
    { 
     throw new ArgumentNullException("symbolHint"); 
    } 

    IEnumerable<string> symbols; 
    symbol = this.VariableHints.TryGetValue(symbolHint, out symbols) ? symbols.Last() : null; 

    return symbol != null; 
} 

다음 PUT이 12/15 코드 커버리지를 달성 :

나는 기본적으로 다음과 같은 방법에 대한 100 %의 코드 커버리지를 달성하기 위해 노력하고 그것을 반환 할 수 있습니다 값 :이 방법은 두 가지 안타 있도록

found = symbolManager.GetLastSymbol(symbolHint, out symbol); 
PexAssert.IsFalse(found); 

이 PUT에 대한 전체 범위를 달성하기 위해, 나는 객체의 상태를 변경해야합니다. 팩토리 메소드를 사용하여 별도의 PUT을 사용하여 각기 다른 상태를 설정할 수 있지만이 방법을 사용하면 완전한 커버리지를 가진 PUT 대신 코드 커버리지가 불완전한 2 개의 PUT을 남겨 둡니다. 나는 이론에서 을 깨닫는다. 2 PUT는 100 %의 결합 된 커버리지를 가질 것이지만 실제로는의 100 % 숫자가 필요하다. 그래서 나는 CI를 올바르게 설정할 수있다.

symbolManager.CreateSymbol(symbolHint); // Ensure next call returns true. 
found = symbolManager.GetLastSymbol(symbolHint, out symbol); 
PexAssert.IsTrue(found); 

는 아마도 GetLastSymbol 방법에 대한 코드 커버리지는 이제 100 %이지만, 이유는

그래서, 같은 PUT의 다른 지점에 도달하기 위해, 위 2 줄에 다음 코드를 추가해야합니다 테스트중인 유형에 다른 메소드 호출을 도입했습니다. 이제 코드 범위는 20/29으로 떨어집니다.

PUT이 단일 메소드의 코드 커버리지 만 측정하도록 어떻게 제한 할 수 있습니까?

Microsoft.Pex :이 경우 :

답변

0

이 문제를 해결하기 위해 PEX에 도움이 되었습니까 설치되어 제공되는 'PEX API 참조'인 경우 그렇게 이유를 설명하십시오, 나는 완전히이 메트릭을 오해 할 수 있습니다 실현 .Framework.Coverage 네임 스페이스에는 다양한 패싯을 코드 적용 범위에서 제외 할 수있는 몇 가지 필터 속성이 포함되어 있습니다. 내가 원하는 한 가지였다 :

PexCoverageFilterMethodAttribute 

내가 커버리지 보고서에서 CreateSymbol 방법을 제거 할 수 있었다이 방법을 사용하기 :이 지금 13/15 내 코드 커버리지를 증가

[PexCoverageFilterMethod(PexCoverageDomain.UserOrTestCode, "CreateVariable")] 

을; 이전보다 높았지만 기대했던 100 %는 아닙니다. 길고도 짧은 이야기, 나는 PEX는

[PexCoverageFilterMethod(PexCoverageDomain.UserOrTestCode, "ctor")] 

지금 내 코드 커버리지에 대한 13/13를 받고있어 ... 너무 커버리지 보고서의 생성자를 포함되었다 발견했다. 나는 행복한 토끼 다 :)