مشاكل الإبلاغ عن Maven2 Multiproject Cobertura أثناء إنشاء موقع mvn

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

سؤال

لدينا مشروع متعدد نحاول تشغيل تقارير تغطية اختبار Cobertura عليه كجزء من إنشاء موقع mvn الخاص بنا.يمكنني تشغيل Cobertura على المشاريع الفرعية، لكنها تشير بشكل خاطئ إلى تغطية بنسبة 0%، على الرغم من أن التقارير لا تزال تسلط الضوء على سطور التعليمات البرمجية التي تم الوصول إليها بواسطة اختبارات الوحدة.

نحن نستخدم ام في ان 2.0.8.لقد حاولت الركض mvn clean site, mvn clean site:stage و mvn clean package site.أعلم أن الاختبارات قيد التشغيل، وأنها تظهر في التقارير المؤكدة (كل من تقارير txt/xml وتقارير الموقع).هل أفتقد شيئًا ما في التكوين؟هل Cobertura لا يعمل بشكل صحيح مع المشاريع المتعددة؟

هذا موجود في الأصل .pom:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <id>clean</id>
                        <goals>
                            <goal>clean</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </pluginManagement>
</build>
<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <inherited>true</inherited>
        </plugin>
    </plugins>
</reporting>

لقد حاولت تشغيله مع وبدون ما يلي في الطفل .poms:

    <reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
        </plugin>
    </plugins>
</reporting>

أحصل على هذا في إخراج البناء:

...
[INFO] [cobertura:instrument]
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Instrumenting 3 files to C:\workspaces\sandbox\CommonJsf\target\generated-classes\cobertura
Cobertura: Saved information on 3 classes.
Instrument time: 186ms

[INFO] Instrumentation was successful.
...
[INFO] Generating "Cobertura Test Coverage" report.
[INFO] Cobertura 1.9 - GNU GPL License (NO WARRANTY) - See COPYRIGHT file
Cobertura: Loaded information on 3 classes.
Report time: 481ms

[INFO] Cobertura Report generation was successful.

والتقرير يبدو كالتالي:cobertura report

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

المحلول

أظن أنك تفتقد تنفيذ المكون الإضافي cobertura أثناء مرحلة الترجمة بحيث لا يتم استخدام التعليمات البرمجية إلا من خلال المكونات الإضافية لإعداد التقارير، في دورة حياة الموقع، بعد تشغيل الاختبارات.لذلك لا يتم اختيار عمليات التشغيل الاختبارية لأنها تعمل على تعليمات برمجية غير مُجهزة.قم بتحليل سجلات البناء الخاصة بك بعناية أكبر - إذا كنت على حق، ستلاحظ أن الاختبارات المؤكدة يتم تنفيذها قبل cobertura:instrument.

التكوين الخاص بي مشابه لتكوينك، ولكن بالإضافة إلى تحديد التنفيذ النظيف في pluginManagement (مثلك)، أحدد المكون الإضافي cobertura بشكل صريح في قسم إنشاء المكونات الإضافية:

  <build>
  ...
    <plugins>
    ...
      <plugin>
        <inherited>true</inherited>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>cobertura-maven-plugin</artifactId>
        <version>${cobertura.plugin.version}</version>
      </plugin>
    </plugins>
  </build>

يعمل نوع التكوين الخاص بي، وجميع عناصر Cobertura موجودة في pom على مستوى المؤسسة العالمية، والتي تستخدمها جميع المشاريع كأصل.

بهذه الطريقة، لا تحدد المشاريع أي شيء يتعلق بـ Cobertura في ملف pom.xml الخاص بها، ولكنها لا تزال تقوم بإنشاء تقارير التغطية.

نصائح أخرى

لم أنجح في إقناع شركة Cobertura بدمج التقارير من المشروعات المتعددة.لقد كانت هذه مشكلة بشكل عام في إعداد التقارير متعددة المشاريع.

لقد تم التقييم السونار كحل لإعداد تقارير المقاييس لدينا.ويبدو أنها تقوم بعمل رائع في توفير مقاييس موجزة عبر المشاريع، بما في ذلك المشاريع المتعددة.

الحل الذي نفذته هو يدوي إلى حد ما، ولكنه يعمل.ويتكون من عدة خطوات، إحداها هي خطوة لدمج ملفات .ser المتعددة التي تم إنشاؤها بواسطة Cobertura.يمكن القيام بذلك باستخدام أداة سطر الأوامر cobertura-merge داخل مهمة مخضرمة.

وفقا للإخراج الذي تظهره هو أن الملفات لم يتم تجهيزها فعليا، فإنه يخبرنا أنه تم تجهيز 3 ملفات فقط.

@Marco على حق، ليس من الممكن تحقيق ذلك بشكل طبيعي من خلال maven فقط لأن المكون الإضافي maven cobertura يفتقد هدف الدمج.

يمكنك تحقيق ذلك من خلال مزيج من الأهداف المخضرمة والنملة: http://thomassundberg.wordpress.com/2012/02/18/test-coverage-in-a-multi-module-maven-project/

ومع ذلك، في حالة وجود مشروع واحد قيد الاختبار، ليست هناك حاجة للدمج.يمكنك، في المشروع الاختباري، نسخ ملف .ser والفئات المجهزة بالأدوات من المشروع قيد الاختبار:

//in test project
<plugin> 
<groupId>com.github.goldin</groupId>
<artifactId>copy-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
    <execution>
    <id>copy-cobertura-data-from-project-under-test</id>
    <phase>compile</phase>
    <goals>
        <goal>copy</goal>
    </goals>
    <configuration>
    <resources>
        <resource>
                        <directory>${project.basedir}/../<project-under-test>/target/cobertura</directory>
                            <targetPath>${project.basedir}/target/cobertura</targetPath>
                <includes>                  
                              <include>*.ser</include>
                </includes>
           </resource>
           <resource>
                    <directory>${project.basedir}/../<project-under-test>/target/generated-classes/cobertura/</directory>
                    <targetPath>${project.basedir}/target/generated-classes/cobertura</targetPath>
                    <preservePath>true</preservePath>
           </resource>
        </resources>
            </configuration>
        </execution>
</executions>
</plugin>

//in parent project
<build>
<plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <configuration>
        <format>xml</format>
        <aggregate>true</aggregate>
    </configuration>
    <executions>
        <execution>
                    <goals>
                <goal>clean</goal>
            </goals>
        </execution>
    </executions>
</plugin>
    </plugins>
</build>
<reporting>
<plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>${cobertura.version}</version>
        </plugin>
</plugins>
 </reporting>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top