2013-06-27 4 views
1

저는 을 의존성 관리 도구로 사용하는 우리의 주요 제품의 빌드 프로세스에 Cobertura을 통합하기 시작했습니다. 테스트 사례가없는 여러 라이브러리 lib-a, lib-blib-c이 있으며 이러한 라이브러리에 의존하고 이러한 라이브러리에 대한 단위 및 통합 테스트가 포함 된 프로젝트가 하나 있습니다.Cobertura와 Ivy가 함께 일하는 방법?

일반적으로 계장 된 테스트를 실행하고 Cobertura 보고서를 생성하는 것은 작동합니다. (10)보고 몇 가지 경고가 계측 동안

  • : 그러나, 몇 가지 문제가 있습니다

    Problems instrumenting archive entry: a.b.c.MyClassFoo java.lang.RuntimeException: java.lang.ClassNotFoundException: a.b.c.MyClassBar

    그러나보고 된 클래스는 소재 기존됩니다. 계측의 끝에서, 그것은

    Saved information on 364 classes

  • 보고서를 보는, 모든 클래스를 보여줍니다보고하지만 의존 libs와의 모든 클래스는 0 %의 범위로보고됩니다.
  • 세부 정보를 볼 때 발견 된 곳이 없음을보고합니다. 내 빌드에서 jar 파일에서

    인스 트루먼 개미 작업을 소스를 얻기 - jar 파일과 로 제공 클래스 파일을 인스트루먼트 -

는 지금은 Cobertura는 에 문제가 있는지, 문제가있을 것 같아요. xml은 다음을 수행합니다.

<cobertura-instrument todir="${build.dir}/instrumented-classes"> 
     <includeClasses regex="com\.mycompany.*" /> 
     <instrumentationClasspath> 
      <path refid="default.test.classpath" /> 
      <pathelement location="${build.classes.dir}" /> 
     </instrumentationClasspath>  
    </cobertura-instrument> 

충분해야합니까?

임보고 된 경고 때문에 궁금합니다. 모든보고 된 클래스는 항아리에서 찾을 수 있습니다.

두 번째 문제를 들어, 난

내가
<cobertura-report destdir="${build.dir}/coverage"> 
    <fileset dir="${src.dir}"> 
     <include name="**/*.java" /> 
    </fileset> 
    <ivy:cachefileset conf="runtime-test" type="sources"/> 
</cobertura-report> 

을 시도 ... cobertura-보고서 항아리와 같은 소스를 제공하는 방법을 몰라하지만 cachefileset이 지원되지 않습니다 말한다. 또한 cobertura-report에 제공 할 수없는 pathid을 사용해 보았습니다. 전에 모든 소스의 압축을 풀어야합니까? (시간이 많이 걸릴 수 있습니다) 보통의 fileset으로 제공합니까?

답변

1

좋아, 내 Cobertura 개미 작업을 리팩터링하면서, 나는 0 % 적용 범위로보고 된 의존성 클래스로 문제를 해결할 수있었습니다. ,

<junit printsummary="yes" haltonfailure="no"> 
     <classpath> 
      <pathelement path="${build.test.classes.dir}"/> 
      <pathelement path="${build.dir}/instrumented-classes"/>   
      <pathelement path="${build.classes.dir}"/> 
      <path refid="default.test.classpath"/> 
      <path refid="cobertura.classpath"/> 
     </classpath> 
     (...) 
    </junit> 

문제가 있다는 ${build.dir}/instrumented-classes 디렉토리에 jar 파일에 담쟁이 결과에 의해 제공되는 jar 파일을 인스트루먼트 :

은 우선은 내 테스트 작업에는 다음이 포함되어 있습니다. 그러나 pathelement은 클래스 파일 만 찾습니다.그래서 나뿐만 아니라 계측 된 단지를 포함하도록 fileset 추가 :

<junit printsummary="yes" haltonfailure="no"> 
     <classpath> 
      <pathelement path="${build.test.classes.dir}"/> 
      <pathelement path="${build.dir}/instrumented-classes"/> 
      <fileset dir="${build.dir}/instrumented-classes"> 
       <include name="*.jar" /> 
      </fileset>    
      <pathelement path="${build.classes.dir}"/> 
      <path refid="default.test.classpath"/> 
      <path refid="cobertura.classpath"/> 
     </classpath> 
     (...) 
    </junit> 

다른 문제는 여전히 남아있다.