Perl スクリプトとモジュールのカバレッジ用にデータをマージする際に問題があります.Devel::Cover を個別に実行すると問題なく動作しますが、データを結合しようとすると、モジュールではなく Perl スクリプトだけの統計が失われます..
説明させてください..
次のようなディレクトリツリーがあります..
Code_Coverage_Test
|
|---->lib
|
|---->t
|
ルート Code_Coverage_Test ディレクトリ内には、モジュールのテストをビルドする Build.pl ファイルと、いくつかのコマンドを自動化する他の 2 つのスクリプトを開始するスクリプトがあります。
./Build.pl
#!/usr/bin/perl -w
use strict;
use Module::Build;
my $buildTests = Module::Build->new(
module_name => 'testPMCoverage',
license => 'perl',
dist_abstract => 'Perl .pm Test Code Coverage',
dist_author => 'me@myEmail.com',
build_requires => {
'Test::More' => '0.10',
},
);
$buildTests->create_build_script();
./startTests.sh
#!/bin/sh
cd t
./doPMtest.sh
./doPLtest.sh
cd ../
perl Build testcover
lib ディレクトリ内に、コード カバレッジを実行しようとしているファイルがあります。
lib/testPLCoverage.pl
#!/usr/bin/perl -w
use strict;
print "Ok!";
lib/testPMCoverage.pm
use strict;
use warnings;
package testPMCoverage;
sub hello {
return "Hello";
}
sub bye {
return "Bye";
}
1;
t ディレクトリには、モジュール用の .t テスト ファイルと、テストを開始する 2 つのスクリプトがあります。どちらもルート ディレクトリの startTests.sh によって呼び出されます。
t/testPMCoverage.t
#!/usr/bin/perl -w
use strict;
use Test::More;
require_ok( 'testPMCoverage' );
my $test = testPMCoverage::hello();
is($test, "Hello", "hello() test");
done_testing();
t/doPLtest.sh
#!/bin/sh
#Test 1
cd ../
cd lib
perl -MDevel::Cover=-db,../cover_db testPLCoverage.pl
t/doPMtest.sh
#!/bin/bash
cd ../
perl Build.pl
perl 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.0
Total 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_db
Devel::Cover: Warning: can't open testPLCoverage.pl for MD5 digest: No such file or directory
Devel::Cover: Warning: can't locate structure for statement in testPLCoverage.pl
Devel::Cover: Warning: can't locate structure for subroutine in testPLCoverage.pl
Devel::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.4
testPLCoverage.pl n/a n/a n/a n/a n/a n/a n/a
Total 87.5 n/a n/a 75.0 0.0 100.0 71.4
---------------------------- ------ ------ ------ ------ ------ ------ ------
Perl モジュールと Perl スクリプトのテストを組み合わせて、1 つのファイルで有効なコード カバレッジを得るにはどうすればよいですか?