2014-01-13 5 views
0

매우 유사한 기능을 테스트하는 두 개의 Java 테스트 사례가 있습니다. IntelliJ의 적용 범위 보고서를 통해 두 곳에서 각 테스트의 소스 코드 적용 범위를 볼 수 있습니다.Intelij는 두 가지 적용 범위 데이터를 비교합니다.

이제 두 테스트의 차이점을보고 싶습니다. 예

void foo(a) { 
if (a>4) { print("hu"); }} 

테스트 케이스 1 :

foo(1); 

테스트 케이스 2 :

foo(5); 

가 지금은 인 IntelliJ가 '인쇄 ("후가")'만 testcase1에 의해 불려 말해 싶습니다. 나는 어떻게 그것을 달성합니까?

+0

수동 해결 방법은 보이는 같은 : HTML 브라우저에서 단계별로 각 패키지 단계를 비교하기 위해 적용 결과를 내보내기. – EhmKah

답변

0

당신은

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); 

StackTraceElementgetClassName()이있는 방법의 호출을 찾을 수 getMethodName() 마녀 도움 당신은 발신자를 찾을 수 있습니다.

예 :

public class A { 
public void foo(int a) { 
    if (a > 4) { 
     System.out.println("hu"); 
     StackTraceElement[] stackTraceElements = Thread.currentThread() 
                   .getStackTrace(); 
     System.out.println(stackTraceElements[2].getMethodName()); 
     } 
    } 

.

class Result { 
public static void main(String[] args) { 
    methodA(); 
} 

public static void methodA(){ 
    new A().foo(5); 
} 

public static void methodB(){ 
    new A().foo(2); 
} 
} 
} 

아웃 넣어 :

hu 
methodA 
+0

멋진 생각이지만 내 문제가 해결되지 않습니다. 어쩌면 두 테스트 모두 같은 방법을 호출 할 것입니다. (차이점이 없음을 의미합니다) 그러나 경로 실행 (모든 if-branches 포함)이 다른지 여부를 알아야합니다. – EhmKah

+0

@EhmKa는 내 예를 살펴 봅니다. 그것은 잘 작동하고 당신은 당신의 필요에 이것을 사용할 수 있습니다. 이제 methodA에서 호출하는 메서드를 말할 수 있습니다. –

+0

@Rucheria 제 문제는 다른 실행 경로를 모른다는 것입니다. 따라서 많은 예제가 있기 때문에 주어진 예제를 각각의 가능한 실행 경로에 넣을 수는 없습니다. – EhmKah