Je suis un peu nouveau dans le module Devel :: Cover, mais je l'ai trouvé très utile pour m'assurer que je ne manque pas de tests.Comment puis-je obtenir une couverture de test de 100% dans un module Perl utilisant DBI?
Un problème que je rencontre est de comprendre le rapport de Devel :: Cover. J'ai regardé la documentation, mais je n'arrive pas à comprendre ce que j'ai besoin de tester pour obtenir une couverture à 100%.
Modifier - Je dois préciser que je ne dis pas que j'ai besoin une couverture de 100%, parce que plusieurs personnes signalent, une couverture de 100% est un terme lâche, ne veut pas dire que mon code est sans bug, et ne peut pas toujours être complètement nécessaire. Depuis que je suis nouveau à Devel :: Cover, je suis intéressé de savoir pourquoi mon code n'est pas une couverture de 100%, dans le cas où je manque quelques importants tests.
Voici la sortie du rapport de couverture:
line err stmt bran cond sub pod time code
...
36 sub connect_database {
37 3 3 1 1126 my $self = shift;
38 3 100 24 if (!$self->{dsn}) {
39 1 7 croak 'dsn not supplied - cannot connect';
40 }
41 *** 2 33 21 $self->{dbh} = DBI->connect($self->{dsn}, q{}, q{})
42 || croak "$DBI::errstr";
43 1 11 return $self;
44 }
...
line err % l !l&&r !l&&!r expr
----- --- ------ ------ ------ ------ ----
41 *** 33 1 0 0 'DBI'->connect($$self{'dsn'}, '', '') || croak("$DBI::errstr")
Et voici et exemple de mon code qui teste cette ligne spécifique:
my $database = MyModule::Database->new({ dsn => 'Invalid DSN' });
throws_ok(sub { $database->connect_database() },
qr/Can't connect to data source/,
'Test connection exception (invalid dsn)');
Ce test passe - la connexion ne lancer une erreur et remplit mon test "throws_ok". J'ai des tests qui testent une connexion réussie, c'est pourquoi je pense avoir une couverture de 33%, mais si je la lis correctement, je pense que je ne suis pas en train de tester la partie "|| croak" de la déclaration. Je pensais que j'étais, avec le test "throws_ok", mais évidemment, il me manque quelque chose.
Est-ce que quelqu'un a des conseils sur comment tester ma ligne DBI-> connect avec succès?
Merci!
Edit:
brian me averti le rapport HTML et la table de vérité qui explique pourquoi la ligne n ° 41 ne passe pas. Le seul problème est que je ne peux pas comprendre ce qu'il me dit. Je suppose que le vrai cœur de ma question est de savoir pourquoi cette ligne spécifique ne couvre pas la couverture.
Voici la table de vérité:
LINE # % # coverage # condition
41 # 33 # A | B | deC# 'DBI'->connect($$self{'dsn'}, '', '') || croak("$DBI::errstr")
# # 0 | 0 | 0 #
# # 0 | 1 | 1 #
# # 1 | X | 1 # (THIS LINE IS Green - the rest are red)
Si quelqu'un pourrait aider à expliquer cette table de vérité, je vous en serais reconnaissant. Il a également été mentionné que pour passer la couverture, j'ai besoin d'un faux objet de base de données, mais je ne vois pas très bien comment les résultats de la couverture pourraient m'indiquer.
Merci encore!
Tenter d'obtenir une couverture complète est probablement un effort inutile. La couverture de la branche devrait être plus que suffisante. Si votre code est si important que vous avez besoin d'une couverture de conditions, vous ne devriez pas l'écrire en Perl. En tant que bénéfice secondaire, Devel :: Cover fonctionne beaucoup plus rapidement lorsque vous ne collectez pas de données de couverture de condition. –
"100% de couverture" est toujours sans signification si vous ne qualifiez pas comment vous faites la couverture. Couverture de ligne Couverture de branche? Couverture de chemin Chacun a différents niveaux de confiance et de difficulté de mise en œuvre. Même alors, vous cherchez à récupérer le temps investi. Est-ce un système de sécurité critique qui pourrait tuer quelqu'un? Dans ce cas, une couverture de 100% ne suffira même pas: vous aurez besoin de tests approfondis du système ainsi que d'ingénieurs de test qualifiés. Cela implique-t-il des systèmes financiers? Dans ce cas, vous devriez également faire une vérification de sécurité. toute couverture% ne correspond pas à "fini". –
@Robert P - Je ne cherche pas une couverture à 100% - J'essaie de comprendre si un test sur mon DBI-> connect me manque. Depuis que je suis nouveau à Devel :: Cover, je pense qu'il est bon de savoir pourquoi mon code n'est pas couvert à 100%. J'ai lu les deux blogs bdfoy ci-dessous, et je sais que je n'ai pas besoin d'une couverture de 100%. Tout comme Perl :: Critic - passer le critique sans aucun avertissement ne suffit pas. – BrianH