2010-08-10 3 views
11

Mon Ruby actuelle sur le projet Rails effectue des tests via rcov (en particulier, relevance rcov, et nous avons une norme assez élevé (nous ne parvenons pas à la construction si nous avons < 95% de couverture de code).changements de couverture Rcov radicalement avec -xrefs

Nous utilisons la commande suivante pour tester ceci:.

rcov_cmd = "rcov --rails --text-summary \ 
      --include #{included_dirs} \ 
      --exclude #{excluded_dirs} \ 
      --aggregate #{coverage_dir}/coverage.data \ 
      --output #{coverage_dir} \ 

Aujourd'hui, je trouve un code qui enregistre vert (run ayant) dans les rapports de Rcov Homever, je peux prouver que ce code ne reçoit pas courir (je lève une exception au début de la fonction, et mes tests unitaires passent)

J'ai fait quelques recherches et trouvé le drapeau --xrefs pour rcov, que je pensais ajouter tous les appelants pour chaque ligne dans les rapports de rcov.

j'ai changé la commande rcov à:

rcov_cmd = "rcov --rails --text-summary --xrefs \ 
     --include #{included_dirs} \ 
     --exclude #{excluded_dirs} \ 
     --aggregate #{coverage_dir}/coverage.data \ 
     --output #{coverage_dir} \ 

(remarquez le drapeau ajouté --xrefs). À la place d'informations supplémentaires sur les appels, j'ai plutôt ma couverture de test de 96% à 48%.

Est-ce que --xrefs change le type d'analyse que fait rcov? (Je pensais que ce serait juste de recueillir des informations sur l'appel). Comment est-ce différent/meilleur de la première commande? (je l'ai vu la chute de la couverture de test unitaire s'il y a une unité défaillante test, et je sais que le pourcentage de couverture peut chuter s'il y a une erreur dans la course, mais il me semble bon)

+0

Avez-vous essayé avec juste '--callsites' et aucun' --xrefs' pour déterminer si c'est réellement l'information incluse d'callsites qui cause la différence? Pourrait réduire le problème un peu. – Shadwell

+0

J'ai remplacé --xrefs et --callsites et j'ai vu la même baisse dans la couverture des tests – RyanWilcox

Répondre

1

De rcov manual:

--[no-]callsites 
    Show callsites in generated XHTML report. (somewhat slower; disabled by default) 
--[no-]xrefs 
    Generate fully cross-referenced report. (includes --callsites) 

de Rcov CallSiteAnalyzer Class

A CallSiteAnalyzer can be used to obtain information about: 

    * where a method is defined ("defsite") 
    * where a method was called from ("callsite") 

Avoir cette analyse rcov peut fournir des informations de couverture plus précise dans le coût de l'exécution plus.