2009-08-17 5 views
15

이유가있는 경우, 단위 테스트를 할 필요가 없거나 가질 필요가없는 클래스가 있습니다. 커버리지 메트릭스에서이 클래스들을 제외하고 싶습니다. 그래서 제가 실제로 신경 쓰는 클래스에 대해 더 잘 이해할 수 있습니다. 지금은 사실 이후 결과를 제외해야합니다. 제가하고 싶은 것은 특성을 사용하여 해당 클래스를 제외 된 것으로 표시하여 시작에 포함되지 않도록하는 것입니다. 자동으로 범위 분석에서 제외 할 속성이있는 클래스를 꾸릴 수있는 방법이 있습니까? VS 커버리지 분석 또는 nCover가 작동합니다.특성을 사용하여 Visual Studio의 적용 범위 분석 코드를 생략하십시오.

FWIW, 이들은 검사 결과 코드가 정확한지 확인할 수있는 클래스입니다. 주로 프레임 워크 클래스를 모의하기 위해 도입 한 기존 프레임 워크 클래스와 관련된 래퍼 클래스입니다. 래퍼가 조롱을 당하면 시험받지 못합니다. 왜냐하면 그들이하는 일은 내가 신경 쓰는 프레임 워크 클래스의 메서드를 감싸는 것이기 때문입니다.

+0

무의식적 인 방법 인 에 대한 적용 범위 데이터를 얻을 수 없다는 문제 때문에 전체적으로 더 적절한 측정 값을 얻으 려하지 않는 방법에 대한 적용 데이터를 제거하려고합니까? –

+0

예. 쉽게 테스트 할 필요가 없거나 쉽게 테스트 할 수없는 메소드가 있습니다. 예를 들어, 프레임 워크 클래스를 대상으로 유닛 테스트를 수행 할 수 있도록 작성된 랩퍼 클래스입니다. 내가 걱정하는 수업에 대한 통계를 위와 같이 엉망으로 만들고 싶지는 않습니다. – tvanfosson

답변

22

VS2010부터는 ExcludeFromCodeCoverageAttribute입니다. Commenters는 NCover와 DotCover + NUnit에서 작동하는 것을 주목했습니다. 사용 예제는 :

[ExcludeFromCodeCoverage] 
public class myUntestableClass 
{ } 

또한이 link를 참조하십시오. VSInstr을 명령 줄 도구로 사용하는 것이 좋습니다./EXCLUDE 옵션을 사용하면 편리합니다.

+0

VS2010에서도 NCover와 함께 작동합니다. – tvanfosson

+0

DotCover + NUnit (VS2012)에서도 작동합니다. – Jeroen

6

Diagnostic 속성 DebuggerNonUserCodeAttributeDebuggerHiddenAttribute에 대해 some information을 찾았습니다. 이러한 특성을 사용하면 VS의 Coverage Analyzer가 결과에서 벗어날 수 있습니다. DebuggerNonUserCodeAttribute 함께 시도하고 작동하는 것. 나는 아마도 내가 생각하고있는 대부분의 수업에서이 수업을 들으려고하지 않을 수있는 부작용이 싫어서 살 수있을 것이다. 그것은 래퍼 클래스에 대해서는 문제가되어서는 안되지만, 본질적으로 테스트하기 어려운 클래스에서는 결국 디버거 액세스가 필요합니다.

나는 여전히 대안을 찾고 있습니다.

+0

이것은 정확히 내가 찾고있는 것입니다. 따라와 주셔서 감사합니다. –

5

NCover를 사용하면 특성을 만든 다음 NCover에 해당 특성을 무시하도록 지시 할 수 있습니다. 우리의 프로젝트에서

, 우리는이 속성 정의 (네임 스페이스를, 그래서 사용하기 쉬운) : 우리는은 NAnt를 사용

public class CoverageExcludeAttribute : Attribute { } 

를, 그래서 우리는 다음과 같다 대상이 :

<target name="unittests" description="run nunit tests" >   
    <ncover 
     .... 
     excludeAttributes="CoverageExcludeAttribute" 
    /> 
</target> 

NCover FAQ의 질문 9는이 방법을 설명합니다. 우리는이 솔루션을 기반으로했습니다.

또는 NCoverExplorer의 제외 기능을 사용하여 네임 스페이스와 어셈블리를 최종 보고서에서 제외 할 수 있습니다. 이것은 단순히 보고서에서 데이터를 제거하지만 최종 결과는 같습니다.

두 기술을 모두 사용합니다.

+0

감사합니다. 그게 바로 제가 찾던 것입니다. 나는 주로 TestDriven.Net과 함께 nCover를 사용하여 CoverageExcludeAttribute를 상자에서 꺼내는 것처럼 보이게합니다. – tvanfosson

+0

최신 버전은 ExcludeFromCodeCoverage 속성으로 작동하므로 나는 그것을 사용하도록 전환했습니다. – tvanfosson