2012-04-10 2 views
1

Я новичок в использовании Эммы. Я пытаюсь добавить задачу emma ant для тестового примера JUnit для модулей в проекте EAR. У меня здесь мало вопросов.Использование Emma для JUnit в ant build.xml

  • Должен ли я использовать инструментальный класс для упаковки моего EAR-проекта?
  • Что такое хороший способ добавить задачу antma для junit? Должен ли я использовать режим emmarun: on-th-fly или офлайн-режим? Для JUnit следует использовать вилку или нет вилки?

Я использую режим автономной работы Emma и Junit с вилкой. Вот мой build.xml

<!--Target and task for EMMA --> 
<taskdef resource="emma_ant.properties" classpathref="Emma.libraryclasspath" /> 
<target name="emma" description="turns on EMMA's instrumentation/reporting" > 
    <property name="emma.enabled" value="true" /> 
    <mkdir dir="${out.instr.dir}" /> 
    <property name="emma.filter" value="" /> 
</target> 

<target name="test" depends="init, compile" description="Run JUnit Test cases under emma environment"> 
    <!-- Emma instrumentation --> 
    <emma enabled="${emma.enabled}" verbosity="verbose"> 
     <instr instrpath="${class.dir}" 
        destdir="${out.instr.dir}"   
        metadatafile="${coverage.dir}/metadata.em" 
        merge="true" 
        mode="copy"> 
      <filter value="${emma.filter}" /> 
     </instr> 
    </emma> 

    <!-- JUnit Start --> 
    <junit printsummary="yes" fork="yes"> 
     <test name="com.hf.platform.authorizer.WebTxnAuthorizerTest" todir="${test.report.dir}"> 
      <formatter type="xml"/> 
     </test> 
     <classpath> 
      <path refid="HFPlatformWeb.classpath"/> 
      <path refid="Emma.libraryclasspath"/> 
     </classpath> 
     <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.ec" /> 
     <jvmarg value="-Demma.coverage.out.merge=false" /> 
    </junit> 
    <!-- Junit End --> 

    <emma enabled="${emma.enabled}" verbosity="verbose"> 
     <report> 
      <sourcepath> 
       <dirset dir="${basedir}"> 
        <include name="src"/> 
        <include name="test-src"/> 
       </dirset> 
      </sourcepath> 
      <fileset dir="${coverage.dir}"> 
       <include name="*.em"/> 
       <include name="*.ec"/> 
      </fileset> 
     <xml outfile="${coverage.report.dir}/report.xml" /> 
     <txt outfile="${coverage.report.dir}/report.txt" /> 
     <html outfile="${coverage.report.dir}/report.html" /> 
     </report> 
    </emma> 

</target> 

Когда я запустил его для одного теста, он не генерирует никакого отчета. Но когда я выполнял те же модульные тесты с EclEmma, ​​он дает правильный результат.

+0

EclEmma использует [jacoco] (http://www.eclemma.org/jacoco/index.html), который несколько никогда не подходить к освещению кода, который также имеет муравей задачи. – oers

ответ

2

В приведенном выше примере мы должны убедиться, что следующие две вещи

  1. Путь к файлу для metadatafile и отчета покрытия файл, который является .ec, .em или .emma файл должен быть абсолютным или относительным к проекту. , например.
  2. Для запуска задачи java/junit, зажатой между заданием инструментария и отчета, он должен использовать путь файла инструментального класса. , например.

    <classpath> <pathelement location="${out.instr.dir}" /> <path refid="Emma.libraryclasspath"/> <path refid="HFPlatformEJB.classpath"/> </classpath>

Смежные вопросы