Cobertura/Emma를 Eclipse 애플리케이션으로 멋지게 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/655979

문제

우리 회사는 빌드 시스템을 업그레이드하여 Buckminster (잘 지내 었음)를 사용하고 있습니다. 당연히 관리자는 코드에 사용하는 동안 코드에 사용하는 메트릭 중 일부를 자동으로 생성 할 수 있다면이를 원합니다. 이러한 메트릭 중 하나는 단위 테스트의 적용 범위입니다.

PDE 기반 인 이전 빌드는 컨텍스트의 모든 플러그인을 구문 분석하고 테스트 클래스를 위해 내부를보고 모든 테스트 케이스를 더 큰 스위트로 던지고, 그 다음을 통해 프로그래밍 방식으로 실행하는 별도의 헤드리스 애플리케이션을 초래했습니다. JUnitResultFormatter.startTestSuite(). 이 과정에서 특정 메타 데이터 (저작권 표시 등)에 대한 자체 재배 테스트와 패키지 종속성에 대한 테스트를 추가합니다.

테스트 앱의 제품을 내보내고 선택한 커버리지 도구로 도구를 내린 다음 실행할 수 있어야합니다. 그러나 커버리지 도구 모두 그들이 다루고있는 전체 클래스 경로를 알고 싶어하는 것 같습니다. 항아리와 종속성을위한 전체 빌드 작업 공간을 트롤링하지 않고이 도구 중 하나를 멋지게 재생할 수 있습니까?

도움이 되었습니까?

해결책

나이가 많은 SO 질문의 도움으로 모든 것이 작동하도록 관리했습니다.

우리는 시작했습니다 이 게시물, Emma를 사용한 예제 커버리지 설정을 제공했습니다. 그러나 커버리지 데이터를 얻고 싶은 모든 플러그인에서 Emma에 대한 의존성을 강요 해야하는 것으로 보입니다.

일부 Google Forensics가 우리를 데려 왔습니다 이 책은 발췌, OSGI 클래스 로더 계층 구조를 적절하게 다루는 것. 추가함으로써 osgi.parentClassloader=app Test Running Application의 config.ini로 줄을 지어 Commandline에 클래스 경로를 지정할 수 있습니다. 해당 클래스 경로는 다음을 포함해야했습니다.

  • 일식 startup.jar
  • 응용 프로그램에서 사용하는 Java SDK 항아리
  • 커버리지 도구 용 항아리

물론, 우리는 <java jar="foo.jar"> ANT 작업은 귀하가 제공하는 모든 클래스 경로 정보를 조용히 무시하고 JAR 만 사용합니다. 우리가 Emma 작업을 한 후, 우리는 Cobertura로 전환했으며, 최종 개미 대본 (약간 요약되고 익명화 된)이 다음과 같습니다.

<target name="generate.coverage" depends="buckminster.init">
  <!-- Generate the classpath. -->
  <path id="cobertura.classpath">
    <fileset dir="${tasks.dir}/lib/cobertura">
      <include name="cobertura.jar" />
      <include name="**/*.jar" />
    </fileset>
  </path>
  <taskdef classpathref="cobertura.classpath" resource="tasks.properties" />

  <!-- Get ready to run the unit tests app, and delete old coverage data. -->
  <unzip src="${test-app.artifact}" dest="${output.dir}" overwrite="true" />
  <delete file="${output.dir}/cobertura.ser" />

  <!-- Instrument the jars in-place. Make sure to only capture what you want instrumented! -->
  <cobertura-instrument datafile="${output.dir}/cobertura.ser">
    <fileset dir="${output.dir}/test-app/plugins">
      <include name="**/*our.company_*.jar" />
    </fileset>
  </cobertura-instrument>

  <!-- Run the unit test application, by classname rather than by jar. -->
  <java fork="true" classname="org.eclipse.equinox.launcher.Main" logerror="true" failonerror="true" maxmemory="1G">
    <classpath>
      <pathelement location="${output.dir}/test-app/startup.jar" />
      <pathelement location="${tasks.dir}/lib/cobertura/cobertura.jar" />
      <fileset dir="${tasks.dir}/lib/cobertura">
        <include name="**/*.jar" />
      </fileset>
      <pathelement location="${java.class.path}" />
    </classpath>
    <sysproperty key="net.sourceforge.cobertura.datafile" file="${output.dir}/cobertura.ser" />            
    <arg value="-data" />
    <arg value="${output.dir}/test-app/workspace" />
    <arg value="--formatter=org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter:${log.dir}/test-results.xml" />
  </java>

  <!-- Generate the coverage reports. -->
  <cobertura-report format="html" datafile="${output.dir}/cobertura.ser" destdir="${output.dir}/cobertura-report">
    <fileset dir="${workspace.dir}/plugins">
      <include name="**/*.java" />
    </fileset>
  </cobertura-report>
</target>

바라건대 이것은 우리와 같은 지점에있는 사람을 돕기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top