我有一个像这样的项目设置:
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未包含在结果中。
我该如何解决这个问题?
答案 0 :(得分:2)
你查过文件了吗?关于Selecting which files to cover的部分似乎最有帮助。 :)看起来+select
选项就是您要查找的选项。
答案 1 :(得分:1)
我想出了解决方法。
此问题的核心是主文件中未覆盖的代码(fizzbuzz-game.pl)未包含在覆盖率报告中,因此总体百分比是错误的。根本问题是实质逻辑存在于主文件中而不是可测试模块中。 这是一种气味(不知道哪个,但我很确定“main()中有很多逻辑”这个名字。)
通过摆脱这种气味,例如。将所有子代码从bin / fizzbuzz-game.pl移到lib / FizzBuzzGame.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
----------------------------------- ------ ------ ------ ------ ------ ------