Question

J'utilise le plug-in Cobertura de Maven (2) pour créer des rapports sur la couverture de code. J'ai le stub suivant que j'utilise dans une méthode:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

Je sais que je dois enregistrer l'exception, etc., mais ce n'est pas le problème pour le moment ... Cobertura refuse de reconnaître que la ligne après que la trace de la pile est imprimée est couverte. C'est-à-dire que la ligne précédée de '}' avant l'instruction System.err.println n'est pas affichée comme étant couverte. Auparavant, l'accolade finale de la méthode n'était pas affichée comme étant couverte, d'où l'instruction System.err . Toute idée de comment convaincre le plugin maven de cobertura que, puisque l'instruction System.err.println est couverte, cette accolade de fin doit avoir été couverte?

Oh oui, et j'utilise un gestionnaire de sécurité fictif pour lever l'exception de sécurité, car c'est le moyen le plus simple que j'ai trouvé pour que le test continue à s'exécuter après l'appel System.exit .

Était-ce utile?

La solution

Je n’ai pas utilisé Cobertura depuis un moment (2005?) et j’ai vu ce comportement à l’époque. Un problème similaire existe avec NCover pour C # et les accolades suivant les blocs catch / finally.

Ma suggestion serait d'ajouter à ce rapport de Cobertura détaillant un problème similaire . Suivez également les conseils de @ tvanfosson et réalisez que ne pas avoir de couverture sur une accolade, qui ne devient en réalité rien dans la JVM, est quelque chose que vous pouvez ignorer en tant que "bruit".

Autres conseils

Je regarderais le rapport de couverture. Vérifiez mes tests. Notez que le code est vraiment couvert et ne vous inquiétez pas si vous frappez à 100%. La couverture de code est mieux utilisée pour rechercher les zones que vous avez peut-être négligé de toucher lors de vos tests, mais vous concentrer uniquement sur une couverture à 100% est une mauvaise habitude qui peut vous conduire à ignorer des tests qui doivent être écrits simplement parce que votre outil indique 100% Utilisez l'outil pour ce qu'il peut faire mais ne tombez pas dans le piège de laisser l'outil définir ce que vous faites.

Dans le format de fichier de classe Java, chaque méthode est annotée avec un décalage de code de table par rapport aux numéros de ligne. Dans ce cas, l'accolade de fermeture ne produit pas de code-octet et n'est donc pas couverte. Ceci est un problème de correspondance imparfaite entre source et bytecode. Elle devrait être gérée par l'outil de couverture, en reconnaissant que cette ligne n'est pas un code.

Je sais que Emma a des problèmes similaires. Clover est beaucoup mieux, mais il est commercial (je ne suis pas sûr qu'il gérera ce cas également) . Si vous utilisez IDEA, vous devriez essayer leur mise en œuvre d'une nouvelle couverture . - c'est assez bon et en développement actif.

Je sais que c’est une vieille question et que Cobertura l’a déjà corrigée, mais la couverture qui manque sur le "} " a été causée automatiquement par l'interne "finalement" et bloquer.

Voir votre code comme ceci:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

Heureusement, cela ne se produit plus pour certaines versions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top