web-dev-qa-db-fra.com

Exclure les méthodes de la couverture de code avec Cobertura

Existe-t-il un moyen d’exclure du code de l’inclusion dans les rapports de couverture Cobertura? Certaines méthodes ne doivent pas être incluses dans le rapport de couverture et ne doivent donc pas réduire les chiffres de couverture.

Je sais que Clover a une telle fonctionnalité, mais je n'ai rien trouvé de semblable pour Cobertura.

51
ReneS

Vous pouvez exclure des classes de l'instrumentation. Ensuite, ils ne doivent pas apparaître sur les rapports. Voir les déclarations exclude ci-dessous.

Vous pouvez également ignorer les appels à certaines méthodes. Voir la déclaration ignore ci-dessous.

Si vous utilisez maven, consultez le manuel du plugin maven

    <configuration>
      <instrumentation>
        <ignores>
          <ignore>com.example.boringcode.*</ignore>
        </ignores>
        <excludes>
          <exclude>com/example/dullcode/**/*.class</exclude>
          <exclude>com/example/**/*Test.class</exclude>
        </excludes>
      </instrumentation>
    </configuration>

Et pour la fourmi voir ceci .

<cobertura-instrument todir="${instrumented.dir}">
  <ignore regex="org.Apache.log4j.*" />
  <fileset dir="${classes.dir}">
    <include name="**/*.class" />
    <exclude name="**/*Test.class" />
  </fileset>
  <fileset dir="${jars.dir}">
    <include name="my-simple-plugin.jar" />
  </fileset>
</cobertura-instrument>
55
Juha Syrjälä

Cela me brise la tête depuis quelque temps maintenant.

Mon problème était que j'avais la configuration du plug-in cobertura maven dans la section de rapport au lieu de la section de construction.

Les paramètres d'instrumentation, et donc l'exclusion de classes ou de packages, ne seront pas appliqués si vous ne les configurez pas dans la section de construction, alors faites attention à cela.

21
Iker Jimenez

N'oubliez pas d'exclure les classes intérieures aussi.

<exclude>path/to/class/MyClass*.class</exclude>

Il m'a fallu des siècles pour constater que je manquais d'un astérisque!

17
Sarah Phillips

Cobertura ne propose pas actuellement une telle fonctionnalité, et Emma non plus (que nous utilisons) bien qu'elle soit répertoriée comme une amélioration à venir - bien que sous la forme d'une extension des règles d'exclusion je crois plutôt que comme une annotation.

Serait pratique pour couvrir proprement ces quelques coins inaccessibles afin que vous puissiez vous battre à 100% sans être ridicule.

Je pense que les annotations seraient probablement une manière plus amicale de le faire, mais elles devraient être nommées de manière assez explicite et basées sur une liste de scénarios acceptables, car je crains que quelque chose comme "@ExcludeFromCoverage" ne soit ajouté généreusement.

4
Jason

Depuis la version 2.0, vous pouvez écrire votre propre annotation @CoverageIgnore.

Il sera reconnu par Cobertura, qui évitera de considérer les méthodes annotées (ne fonctionne pas sur les classes pour autant que je sache).

  1. Créez une annotation vide:
public @interface CoverageIgnore {}
  1. Ensuite, annotez les méthodes que vous souhaitez exclure des rapports:
public class SomeClass {
    @CoverageIgnore
    public void foo(String baz) {
        // useless stuff
    }
}

Source: https://github.com/cobertura/cobertura/wiki/Coverage-Annotations

0
Salvioner