How to use Devel::Cover
Quick introduction and usage of Devel::Cover to get code coverage metrics for Perl
It’s time to deploy another version of my CPAN module. I have 57 files and 698 tests: the question is
Are my tests good enough? Did they cover all possible cases?
Mmh, it’s a difficult question, the answer depends on a lot of things … here comes Devel::Cover to the rescue. So we have this magic module that gives us some statistics to evaluate where are the gaps in our tests. Yes, I know, it is still a difficult question, but at least Devel::Cover gives us some answers, for sure it is a good starting point.
Consider I am on Windows, so I have
set instead of
dmake instead of
make. My working folder, is
If it is not the first time you run it, launch a
C:\SVN_ROOT\PNI>cover -delete Deleting database C:\SVN_ROOT\PNI\cover_db
Just set the environment variable
HARNESS_PERL_SWITCHES=-MDevel::Cover and run your tests.
C:\SVN_ROOT\PNI>set HARNESS_PERL_SWITCHES=-MDevel::Cover C:\SVN_ROOT\PNI>prove -l
Here it is the cool part!
C:\SVN_ROOT\PNI>cover Reading database from C:\SVN_ROOT\PNI\cover_db ... Writing HTML output to C:\SVN_ROOT\PNI\cover_db/coverage.html ... done.
This will produce a coverage.html file in the cover_db/ directory.
Noooooo, my _node-perlfunc-int.t has a red entry with a 50% … mmh maybe because the test file is almost empty, it just checks default values.
If I click on that ugly 50.0, I can see this.
I’m going to add some tests, checking some results and for example passing wrong parameters. This is the result:
C:\SVN_ROOT\PNI>prove -l t\_node-perlfunc-int.t t\_node-perlfunc-int.t .. 1/? Devel::Cover: Deleting old coverage for changed file t/_node-perlfunc-int.t t\_node-perlfunc-int.t .. ok All tests successful. Files=1, Tests=9, 2 wallclock secs ( 0.06 usr + 0.01 sys = 0.08 CPU) Result: PASS
Devel::Cover is a really powerful tool … just use it!