2011-09-02 1 views
0

내 패키지 tree()인지 여부에 따라 jdepend을 통해 junit에서 테스트하고 싶습니다. 패키지주기 (즉, 직접 순환 종속성이 있음). 현재는 그렇지 않습니다 (아래 출력 참조). jdepend의 Eclipse 플러그인은 tree의주기를 찾지 못합니다. 그러나 주장 아래, jdepend 설명서에 제안 실패junpend에서 jdepend의 JavaPackage.containsCycle()을 사용하여 내 패키지가 패키지주기에 있는지 여부를 감지합니까?

// setup.... 
JavaPackage p = jdepend.getPackage("tree"); 
System.out.println(p.getName() + "'s efferent packages: "); 
for (Object jp : p.getEfferents()) { 
    System.out.println(((JavaPackage) jp).getName());    
} 
assertThat(p.containsCycle(), is(false)); 

출력은 다음과 같습니다

tree's efferent packages: 
java.util 
java.lang 
java.lang.reflect 
java.util.logging 
java.io 
org.hamcrest 

주장은() containsCycle() 재귀 getEfferents를 호출한다는 것입니다 실패하는 이유는,의 결과로 패키지를두고 일부 패키지가 이미 있으면 목록을 반환하고 true을 반환합니다. 그래서 containsCycle()도달 가능한 패키지주기 (즉, 트리가 간접적 인 순환 종속성을 가졌는지 여부)가 있는지를 검사한다.

그러나 순환주기 의존성 즉, ()의 패키지주기 (예 : org.hamcrest의 다른 패키지주기로 연결됨)에서만 테스트 할 수 있습니까?

답변

1

다음 솔루션은 일반적으로 작동하지 않지만 해결 등 :

대신 트리가 직접 패키지 종속성이 있는지 여부를 확인하는, 당신은 간접 패키지 종속성을 확인 할 (즉, 나무가 패키지주기에 이르게 여부) p.containsCycle()를 통해,하지만 다음 코드 후 :

final PackageFilter filter = new PackageFilter(); 
    jdepend.setFilter(filter); 
    filter.addPackage("org.hamcrest"); 

그런 식으로, 나무에 달려 패키지 (참조 질문에 나열된 출력), 그러나 그 자체가 사전에 걸러주기를 가지고있다.

새로운 점을 가져 오는 경우 필터를 패키지에 추가해야 할 수도 있다는 단점이 있습니다. 그리고 메인 시퀀스 D와의 거리와 같은 다른 메트릭을 계산하기 위해 그 필터를 사용하고 싶지 않기 때문에 다른 jdepend-tests에 대해 다른 설정을해야합니다. 마지막으로 중요한 것은 tree -> yourFilteredPackage가 일부인 경우입니다 직접 사이클 중 감지되지 않습니다. (

관련 문제