كيف أقوم بإنشاء تقارير تغطية رمز Emma باستخدام Ant؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

كيف أقوم بإعداد مهمة Ant لإنشاء إيما تقارير تغطية الكود؟

هل كانت مفيدة؟

المحلول

للإجابة على الأسئلة حول مكان وجود الأدلة المصدرية والمثبتة (يمكن تحويلها إلى أي بنية دليل قياسية لديك):

<property file="build.properties" />
<property name="source" location="src/main/java" />
<property name="test.source" location="src/test/java" />
<property name="target.dir" location="target" />
<property name="target" location="${target.dir}/classes" />
<property name="test.target" location="${target.dir}/test-classes" />
<property name="instr.target" location="${target.dir}/instr-classes" />

مسارات الفصل:

<path id="compile.classpath">
  <fileset dir="lib/main">
    <include name="*.jar" />
  </fileset>
</path>

<path id="test.compile.classpath">
  <path refid="compile.classpath" />
  <pathelement location="lib/test/junit-4.6.jar" />
  <pathelement location="${target}" />
</path>

<path id="junit.classpath">
  <path refid="test.compile.classpath" />
  <pathelement location="${test.target}" />
</path>

تحتاج أولاً إلى الإعداد حيث يمكن لـ Ant العثور على مكتبات Emma:

<path id="emma.lib" >
    <pathelement location="${emma.dir}/emma.jar" />
    <pathelement location="${emma.dir}/emma_ant.jar" />
</path>

ثم قم باستيراد المهمة:

<taskdef resource="emma_ant.properties" classpathref="emma.lib" />

ثم قم بصياغة الكود:

<target name="coverage.instrumentation">
    <mkdir dir="${instr.target}"/>
    <mkdir dir="${coverage}"/>
    <emma>
        <instr instrpath="${target}" destdir="${instr.target}" metadatafile="${coverage}/metadata.emma" mode="copy">
            <filter excludes="*Test*"/>
        </instr>
    </emma>
    <!-- Update the that will run the instrumented code -->
    <path id="test.classpath">
        <pathelement location="${instr.target}"/>
        <path refid="junit.classpath"/>
        <pathelement location="${emma.dir}/emma.jar"/>
    </path>
</target>

ثم قم بتشغيل هدف باستخدام وسيطات VM المناسبة مثل:

<jvmarg value="-Demma.coverage.out.file=${coverage}/coverage.emma" />
<jvmarg value="-Demma.coverage.out.merge=true" />

أخيرًا قم بإنشاء تقريرك:

<target name="coverage.report" depends="coverage.instrumentation">
    <emma>
        <report sourcepath="${source}" depth="method">
            <fileset dir="${coverage}" >
                <include name="*.emma" />
            </fileset>
            <html outfile="${coverage}/coverage.html" />
        </report>
    </emma>
</target>

نصائح أخرى

ال يحتوي دليل المستخدم على مثال جيد لكيفية إعداد البرنامج النصي للبناء الخاص بك بحيث لا تقوم فقط بفصل التعليمات البرمجية المجهزة عن التنفيذ، بل يتم أيضًا تضمينها كلها في نفس الشيء <target> بحيث لا تضطر إلى تشغيل سلسلة من الأهداف المختلفة، ولكن بدلاً من ذلك يمكنك القيام بشيء مثل ant emma tests (لو ant tests كانت هي الطريقة التي تجري بها عادةً اختبارات وحدتك، على سبيل المثال).

وهنا مثالهم:

<target name="emma" description="turns on EMMA instrumentation/reporting" >
    <property name="emma.enabled" value="true" />
    <!-- EMMA instr class output directory: -->
    <property name="out.instr.dir" value="${basedir}/outinstr" />
    <mkdir dir="${out.instr.dir}" />
</target>

<target name="run" depends="init, compile" description="runs the examples" >
    <emma enabled="${emma.enabled}" >
      <instr instrpathref="run.classpath"
             destdir="${out.instr.dir}" 
             metadatafile="${coverage.dir}/metadata.emma"
             merge="true"
      />
    </emma>

    <!-- note from matt b: you could just as easily have a <junit> task here! -->
    <java classname="Main" fork="true" >
      <classpath>
       <pathelement location="${out.instr.dir}" />
        <path refid="run.classpath" />
        <path refid="emma.lib" />
      </classpath> 
      <jvmarg value="-Demma.coverage.out.file=${coverage.dir}/coverage.emma" />
      <jvmarg value="-Demma.coverage.out.merge=true" />
    </java>

    <emma enabled="${emma.enabled}" >
      <report sourcepath="${src.dir}" >
        <fileset dir="${coverage.dir}" >
          <include name="*.emma" />
        </fileset>

        <txt outfile="${coverage.dir}/coverage.txt" />
        <html outfile="${coverage.dir}/coverage.html" />
      </report>
    </emma>
</target>

يقدم Emma 2.1 طريقة أخرى للحصول على معلومات تغطية وقت التشغيل (ملف .ec).يمكن للمرء أن يطلب البيانات عن بعد من المنفذ المحدد للكمبيوتر حيث يتم تشغيل التطبيق المجهز.لذلك ليست هناك حاجة لإيقاف VM.

للحصول على الملف الذي يحتوي على بيانات تغطية وقت التشغيل، يتعين عليك إدراج المقتطف التالي في برنامج Ant النصي بين تشغيل الاختبارات وإنشاء تقرير التغطية:

<emma>
    <ctl connect="${emma.rt.host}:${emma.rt.port}" >
        <command name="coverage.get" args="${emma.ec.file}" />
        <command name="coverage.reset" />
    </ctl>
</emma>

الخطوات الأخرى مشابهة لـ Emma 2.0.تم وصفها بشكل مثالي في المنشور السابق

مزيد من المعلومات حول ميزات إيما 2.1: http://sourceforge.net/project/shownotes.php?group_id=108932&release_id=336859

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top