2016-06-07 4 views
2

비즈니스 규칙으로 특정 네임 스페이스의 사용을 다른 네임 스페이스의 내부에서 허용하지 않습니다.단위 테스트 또는 코드 분석을 위해 C#에서 네임 스페이스가 클래스에서 사용되는지 여부를 확인할 수 있습니까?

예 : 우리가 더 쉽게 오히려 코드 리뷰에 의존하기보다는,이 비즈니스 규칙을 적용 할 수 있도록

using X.A; //Allowed 
using X.B; //Not allowed 

namespace X.C 
{ 
    const string abc = X.A.MyClass.ABC; //Allowed 
    const string def = X.B.MyClass.DEF; //Not allowed, because we are using X.B 

    public void MyMethod() 
    { 
     string ghi = X.A.MyClass.GHI; //Allowed 
     string jkl = X.B.MyClass.JKL; //Not allowed because we are using X.B 
     string mno = "X.B.MyClass.MNO"; //Allowed, because we are not accessing X.B 
    } 
} 

은, 코드 분석, 또는 두 가지 모두를 통해, 단위 테스트와이를 제어 할 수있는 이런 종류의 일을 쉽게 놓칠 수 있습니까? 가능하다고 가정하면 어떻게 할 것입니까?

+4

이러한 규칙의 목적은 무엇입니까? 이것은 실제로 유용하지 않습니다. 대신 어셈블리 참조를 제거하지 않으시겠습니까? – poke

+0

단위 테스트는 _implementation_이 아닌 _results_를 확인하기위한 것입니다. 코드 분석을 사용하여이 사용을 탐지 할 수 있습니다. _how_ 지금 질문하고 싶다면 질문에 추가하고 사용할 코드 분석 도구를 지정하십시오. –

+1

두 개 이상의 어셈블리가 동일한 네임 스페이스 계층을 공유 할 수 있습니다. 하나의 dll에는'X.A'를 넣고 다른 하나에는'X.B'를 넣을 수 있습니다. 하지만 실제로 네임 스페이스로 액세스를 제어하는 ​​것은 어색하며 도구를 계속 사용하여 계속 작동하게 만듭니다. –

답변

2

이러한 규칙은 도구 NDpeend that let's write code rule through C# LINQ queriescheck such rules live in Visual Studioin your Build Process에서 가능합니다.

구체적으로 이러한 규칙은 같을 수 :

warnif count > 0 from n in Namespaces where 
n.IsUsing ("NUnit.Core.Extensibility") && 
(n.Name == @"NUnit.Core.Builders") 
select new { n, n.NbLinesOfCode } 
// the namespace NUnit.Core.Builders 
// shouldn't use directly 
// the namespace NUnit.Core.Extensibility 
// because (TODO insert your reason) 

... 그리고이 규칙 편집 및 실행/비주얼 스튜디오에서 라이브 적용 할 수 있습니다. NDepend Namespace Rule Edited in Visual Studio

사실 당신은 dependency graph에서 또는 dependency matrix에서 클릭 한 번으로 이러한 코드 규칙을 생성 할 수 있습니다

NDepend Dependency Graph

NDepend가 제공하기 때문에 이러한 규칙 규칙은 또한 단위 테스트를 작성하고 적용 할 수 있습니다 및 API.

당신은 또한 우리의 white books concerning structuring code through namespaces and assemblies에 관심이있을 수 있습니다.

면책 조항 : 본인은 NDepend에서 근무합니다.

관련 문제