在Devel :: Cover报告中包含未覆盖的文件

时间:2010-05-25 20:35:11

标签: perl unit-testing code-coverage

我有一个像这样的项目设置:

bin/fizzbuzz-game.pl
lib/FizzBuzz.pm
test/TestFizzBuzz.pm
test/TestFizzBuzz.t

当我对此进行报道时,使用

perl -MDevel::Cover=-db,/tmp/cover_db test/*.t

...我得到以下输出:

----------------------------------- ------ ------ ------ ------ ------ ------
File                                  stmt   bran   cond    sub   time  total
----------------------------------- ------ ------ ------ ------ ------ ------
lib/FizzBuzz.pm                      100.0  100.0    n/a  100.0    1.4  100.0
test/TestFizzBuzz.pm                 100.0    n/a    n/a  100.0   97.9  100.0
test/TestFizzBuzz.t                  100.0    n/a    n/a  100.0    0.7  100.0
Total                                100.0  100.0    n/a  100.0  100.0  100.0
----------------------------------- ------ ------ ------ ------ ------ ------

即:完全未覆盖的文件bin / fizzbuzz-game.pl未包含在结果中。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

你查过文件了吗?关于Selecting which files to cover的部分似乎最有帮助。 :)看起来+select选项就是您要查找的选项。

答案 1 :(得分:1)

我想出了解决方法。

此问题的核心是主文件中未覆盖的代码(fizzbuzz-game.pl)未包含在覆盖率报告中,因此总体百分比是错误的。根本问题是实质逻辑存在于主文件中而不是可测试模块中。 这是一种气味(不知道哪个,但我很确定“main()中有很多逻辑”这个名字。)

通过摆脱这种气味,例如。将所有子代码从bin / fizzbuzz-game.pl移到lib / FizzBu​​zzGame.pm,理论上可以对代码进行测试,并且最终可以包含在测试运行中。

此后的覆盖率报告变为:

----------------------------------- ------ ------ ------ ------ ------ ------
File                                  stmt   bran   cond    sub   time  total
----------------------------------- ------ ------ ------ ------ ------ ------
lib/FizzBuzz.pm                      100.0  100.0    n/a  100.0    0.0  100.0
lib/FizzBuzzGame.pm                   75.0    n/a    n/a   75.0  100.0   75.0
Total                                 87.5  100.0    n/a   83.3  100.0   88.9
----------------------------------- ------ ------ ------ ------ ------ ------