Devel :: Cover合并Perl脚本和模块的覆盖率数据

Devel :: Cover合并Perl脚本和模块的覆盖率数据,第1张

概述我有问题合并数据覆盖Perl脚本和模块..运行Devel :: Cover单独工作正常,但当我尝试组合数据时,我失去统计信息只是Perl脚本而不是模块.. 让我解释.. 我有一个看起来像这样的目录树.. Code_Coverage_Test | |---->lib | |---->t | 在根Code_Coverage_Test目录中,我有Build.pl文件,它为模块和脚本构建测试,启 我有问题合并数据覆盖Perl脚本和模块..运行Devel :: Cover单独工作正常,但当我尝试组合数据时,我失去统计信息只是Perl脚本而不是模块..

让我解释..

我有一个看起来像这样的目录树..

Code_Coverage_Test | |---->lib | |---->t |

在根Code_Coverage_Test目录中,我有Build.pl文件,它为模块和脚本构建测试,启动另外两个脚本,为我自动执行某些命令.

./Build.pl

#!/usr/bin/perl -wuse strict;use Module::Build;my $buildTests = Module::Build->new(        module_name             => 'testPMCoverage',license                 => 'perl',dist_abstract           => 'Perl .pm Test Code Coverage',dist_author             => '[email protected]',build_requires  => {           'Test::More' => '0.10',},);$buildTests->create_build_script();

./startTests.sh

#!/bin/shcd t./doPMtest.sh./dopltest.shcd ../perl Build testcover

在lib目录里面我有我试图运行代码覆盖的文件..

liB / testPLCoverage.pl

#!/usr/bin/perl -wuse strict;print "Ok!";

liB / testPMCoverage.pm

use strict;use warnings;package testPMCoverage;sub hello {    return "Hello";}sub bye {    return "Bye";}1;

在t dir中,我有我的.t测试文件和2个脚本,为我启动测试..两个都由根目录中的startTests.sh调用

吨/ testPMCoverage.t

#!/usr/bin/perl -wuse strict;use Test::More;require_ok( 'testPMCoverage' );my $test = testPMCoverage::hello();is($test,"Hello","hello() test");done_testing();

吨/ dopltest.sh

#!/bin/sh#Test 1cd ../cd libperl -MDevel::Cover=-db,../cover_db testPLCoverage.pl

吨/ doPMtest.sh

#!/bin/bashcd ../perl Build.plperl Build test

我遇到的问题是,当dopltests.sh脚本运行时,我得到覆盖数据,没问题.

---------------------------- ------ ------ ------ ------ ------ ------ ------file                           STMT   Bran   Cond    Sub    pod   Time  total---------------------------- ------ ------ ------ ------ ------ ------ ------testPLCoverage.pl             100.0    n/a    n/a  100.0    n/a  100.0  100.0Total                         100.0    n/a    n/a  100.0    n/a  100.0  100.0---------------------------- ------ ------ ------ ------ ------ ------ ------

但是,当doPMtest.sh脚本完成并且startTests.sh脚本启动Build testcover命令时,我会丢失该数据并获取这些消息…

Reading database path/Code_Coverage_Tests/cover_dbDevel::Cover: Warning: can't open testPLCoverage.pl for MD5 digest: No such file or directoryDevel::Cover: Warning: can't locate structure for statement in testPLCoverage.plDevel::Cover: Warning: can't locate structure for subroutine in testPLCoverage.plDevel::Cover: Warning: can't locate structure for time in testPLCoverage.pl

..不知怎的,我丢失了数据

---------------------------- ------ ------ ------ ------ ------ ------ ------file                           STMT   Bran   Cond    Sub    pod   Time  total---------------------------- ------ ------ ------ ------ ------ ------ ------blib/lib/testPMCoverage.pm     87.5    n/a    n/a   75.0    0.0  100.0   71.4testPLCoverage.pl               n/a    n/a    n/a    n/a    n/a    n/a    n/aTotal                          87.5    n/a    n/a   75.0    0.0  100.0   71.4---------------------------- ------ ------ ------ ------ ------ ------ ------

如何组合Perl模块和Perl脚本测试以在一个文件中获得有效的代码覆盖?

解决方法 Perl不存储它使用的文件的完整路径.如果它通过相对路径找到文件,则仅存储相对路径.您可以在perl中显示的路径中显示警告,并在这些文件中显示错误消息.

当Devel :: Cover处理文件时,它使用perl给出的路径.你可以在Devel :: Cover的报告中看到这个,你有testPLCoverage.pl和blib / lib / testPMCoverage.pm.

在实践中,这对您来说意味着无论何时将覆盖范围放入coverage数据库,都应该确保从同一目录中进行覆盖,以便Devel :: Cover可以匹配并定位coverage数据库中的文件.

我认为这是你遇到的问题.

我的建议是在t / dopltest.sh中你不要进入lib.你可以运行类似的东西:

perl -Mblib -MDevel :: Cover = -db,.. / cover_db lib / testPLCoverage.pl

(顺便说一下,为什么lib中的文件?)

我认为这意味着Devel :: Cover将在每种情况下从项目根运行,因此应该允许它匹配并找到文件.

总结

以上是内存溢出为你收集整理的Devel :: Cover合并Perl脚本和模块的覆盖率数据全部内容,希望文章能够帮你解决Devel :: Cover合并Perl脚本和模块的覆盖率数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存