2016-12-07 19 views
0

현재 JUnit 테스트 케이스를 실행하고 대상 클래스 (테스트중인 클래스)에서 정보를 추출해야하는 프로젝트에서 작업 중입니다. 설명 된 문장을 추출하기 위해 eclEmma를 사용했지만이 도구를 사용하여 테스트 클래스를 실행 한 후 대상에서 실행 된 행 번호 만 추출 할 수있었습니다.분기 결정의 부울 값을 추출하는 방법은 무엇입니까?

대상 클래스의 특정 참/거짓 분기를 처리 할 때 어떤 조건이 확인되는지를 파생시키기 위해 if 문에서 분기 결정의 부울 값을 추출하려고합니다.

JavaParser를 사용하여 Java 파일을 구문 분석 한 후 다음 정보를 추출 할 수 있음을 알고 있지만 분기 결정의 부울 값을 추출하는 방법을 모르겠습니다.

public void visit(IfStmt stmt, Void arg) 
    { 
     System.out.println(stmt.getCondition()); 
     System.out.println(stmt.getElseStmt()); 
     System.out.println(stmt.getThenStmt()); 
     super.visit(stmt, null); 
    } 
+0

가능한 [Eclemma는 4 개의 분기 중 1 개가 적용되지 않지만 분기는 무엇이라고 말합니까?] (http://stackoverflow.com/questions/15493094/eclemma-says-1-of-4-branches-not- 덮여 있지만 - 지점 - 그것은 - 그것) – Godin

답변

2

EclEmma는 JaCoCo code coverage library에 따라 단순히 이클립스로의 통합을 제공을 오전, 실제 작업 (계측 및 분석) JaCoCo에 의해 수행된다.

JaCoCo는 소스 코드가 아닌 바이트 코드 분석을 수행합니다. 소스 코드는 바이트 코드 분석 결과를 시각화하는 데에만 사용됩니다 (강조 표시하여 장식). 바이트 코드에는 행에 대한 정보 만 포함되어 있기 때문에 불행하게도 바이트 코드 브랜치를 소스 코드에 매핑하는 것은 간단한 작업이 아니며 소스 코드의 구문 분석과 많은 공통점이 없습니다. 이것이 바로 JaCoCo에서 제공하지 않는 이유입니다. 그러나 일부 실험 작업이이 주제에 대해 수행되었습니다. 돈 -

사람이 신뢰할 수있는 이러한 매핑을 구현 할 수 있다면, 그래서

기부는, JaCoCo에 환영 : 자세한 내용은 다음 링크에서 보라 다시 기부하는 것을 주저하지 않습니다.

-1

당신이 바로 그 길에 있습니다 : 당신이 한대로 정확히 IfStmt에 방문자를 사용할 수 있으며 상태를 (이 괄호에 표시되는 값입니다) 추출 할 그래서 당신은 얻을 :

public void visit(IfStmt stmt, Void arg) { 
    System.out.println(stmt.getCondition()); 
    super.visit(stmt, null); 
} 

그렇다면 내가 원하는 코드를 인쇄 할 수 있습니다. 물론 코드를 인쇄하거나 더 자세히 분석 할 수도 있습니다.

면책 조항 : 나는 JavaParser 사용자에