मुझे कुछ समय लगा और मुझे कई स्नोत से छोटे स्निपेट लेने और उन्हें एक साथ पिघलाने में भी मदद मिली, लेकिन मुझे लगता है कि मेरे पास एक छोटा सा काम करने का उदाहरण है जो एक पर्ल नौसिखिया के लिए पर्याप्त रूप से प्रदर्शित करता है जो यूनिट परीक्षण और कोड कवरेज सहित पर्ल बिल्ड प्रक्रिया है विश्लेषण और रिपोर्टिंग। (मैं एक Windows XP प्रो पीसी पर ActiveState ActivePerl v5.10.0 का उपयोग कर रहा हूं , मॉड्यूल :: बिल्ड , टेस्ट :: अधिक , देवल :: कवर )
अपने पर्ल प्रोजेक्ट के लिए एक डायरेक्टरी से शुरुआत करें और फिर अपने प्रोजेक्ट डायरेक्टरी के तहत "लिबास" डायरेक्टरी और "टी" डायरेक्टरी बनाएं:
HelloPerlBuildWorld
|
|----------> lib
|
|----------> t
"Lib" निर्देशिका में, "HelloPerlBuildWorld.pm" नामक एक टेक्स्ट फ़ाइल बनाएं। यह फ़ाइल आपका पर्ल मॉड्यूल है जिसका आप निर्माण और परीक्षण करेंगे। निम्न सामग्री को इस फ़ाइल में पेस्ट करें:
use strict;
use warnings;
package HelloPerlBuildWorld;
$HelloPerlBuildWorld::VERSION = '0.1';
sub hello {
return "Hello, Perl Build World!";
}
sub bye {
return "Goodbye, cruel world!";
}
sub repeat {
return 1;
}
sub argumentTest {
my ($booleanArg) = @_;
if (!defined($booleanArg)) {
return "null";
}
elsif ($booleanArg eq "false") {
return "false";
}
elsif ($booleanArg eq "true") {
return "true";
}
else {
return "unknown";
}
return "Unreachable code: cannot be covered";
}
1;
"T" निर्देशिका में, "HelloPerlBuildWorld.t" नामक एक टेक्स्ट फ़ाइल बनाएं। यह फ़ाइल आपकी इकाई परीक्षण स्क्रिप्ट है जो ऊपर दिए गए आपके पर्ल मॉड्यूल का पूरी तरह से परीक्षण करने का प्रयास करेगी। इस फ़ाइल में निम्न सामग्री पेस्ट करें:
use strict;
use warnings;
use Test::More qw(no_plan);
BEGIN { use_ok('HelloPerlBuildWorld') };
require_ok( 'HelloPerlBuildWorld' );
my $helloCall = HelloPerlBuildWorld::hello();
like($helloCall, qr/Hello, .*World/, "hello() RE test");
is($helloCall, "Hello, Perl Build World!", "hello() IS test");
for (my $ctr=1; $ctr<=10; $ctr++) {
my $repeatCall = HelloPerlBuildWorld::repeat();
is($repeatCall, 1, "repeat() IS test");
}
my $argumentTestCall1 = HelloPerlBuildWorld::argumentTest();
is($argumentTestCall1, "null", "argumentTest() IS null test");
my $argumentTestCall2 = HelloPerlBuildWorld::argumentTest("true");
is($argumentTestCall2, "true", "argumentTest() IS true test");
my $argumentTestCall3 = HelloPerlBuildWorld::argumentTest("false");
is($argumentTestCall3, "false", "argumentTest() IS false test");
my $argumentTestCall4 = HelloPerlBuildWorld::argumentTest(123);
is($argumentTestCall4, "unknown", "argumentTest() IS unknown test");
अब अपने शीर्ष स्तर के प्रोजेक्ट डायरेक्टरी में वापस जाएं, "Build.PL" नामक एक टेक्स्ट फ़ाइल बनाएं। यह फ़ाइल आपकी बिल्ड स्क्रिप्ट बनाएगी जिसे आप बाद में उपयोग करेंगे। इस फ़ाइल में निम्न सामग्री पेस्ट करें:
use strict;
use warnings;
use Module::Build;
my $builder = Module::Build->new(
module_name => 'HelloPerlBuildWorld',
license => 'perl',
dist_abstract => 'HelloPerlBuildWorld short description',
dist_author => 'Author Name <email_addy@goes.here>',
build_requires => {
'Test::More' => '0.10',
},
);
$builder->create_build_script();
वह सभी फाइलें जिनकी आपको जरूरत है। अब शीर्ष स्तरीय परियोजना निर्देशिका में कमांड लाइन से, निम्न कमांड टाइप करें:
perl Build.PL
आपको निम्नलिखित के समान कुछ दिखाई देगा:
Checking prerequisites...
Looks good
Creating new 'Build' script for 'HelloPerlBuildWorld' version '0.1'
अब आपको निम्नलिखित कमांड के साथ अपने यूनिट टेस्ट चलाने में सक्षम होना चाहिए:
Build test
और कुछ इसी तरह देखें:
Copying lib\HelloPerlBuildWorld.pm -> blib\lib\HelloPerlBuildWorld.pm
t\HelloPerlBuildWorld....ok
All tests successful.
Files=1, Tests=18, 0 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU)
कोड कवरेज विश्लेषण के साथ अपनी इकाई परीक्षण चलाने के लिए, यह प्रयास करें:
Build testcover
और आप इस के आदेश पर कुछ देखेंगे:
t\HelloPerlBuildWorld....ok
All tests successful.
Files=1, Tests=18, 12 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU)
cover
Reading database from D:/Documents and Settings/LeuchKW/workspace/HelloPerlBuildWorld/cover_db
----------------------------------- ------ ------ ------ ------ ------ ------
File stmt bran cond sub time total
----------------------------------- ------ ------ ------ ------ ------ ------
D:/Perl/lib/ActivePerl/Config.pm 0.0 0.0 0.0 0.0 n/a 0.0
D:/Perl/lib/ActiveState/Path.pm 0.0 0.0 0.0 0.0 n/a 0.0
D:/Perl/lib/AutoLoader.pm 0.0 0.0 0.0 0.0 n/a 0.0
D:/Perl/lib/B.pm 18.6 16.7 13.3 19.2 96.4 17.6
...
[SNIP]
...
D:/Perl/lib/re.pm 0.0 0.0 0.0 0.0 n/a 0.0
D:/Perl/lib/strict.pm 84.6 50.0 50.0 100.0 0.0 73.1
D:/Perl/lib/vars.pm 44.4 36.4 0.0 100.0 0.0 36.2
D:/Perl/lib/warnings.pm 15.3 12.1 0.0 11.1 0.0 12.0
D:/Perl/lib/warnings/register.pm 0.0 0.0 n/a 0.0 n/a 0.0
blib/lib/HelloPerlBuildWorld.pm 87.5 100.0 n/a 83.3 0.0 89.3
Total 9.9 4.6 2.8 11.3 100.0 7.6
----------------------------------- ------ ------ ------ ------ ------ ------
Writing HTML output to D:/Documents and Settings/LeuchKW/workspace/HelloPerlBuildWorld/cover_db/coverage.html ...
done.
(कोई व्यक्ति कृपया यह बताएं कि कवर को छोड़कर सभी पर्ल पुस्तकालयों को अनदेखा करने के लिए कैसे कॉन्फ़िगर किया जाए और मेरे द्वारा लिखे गए मेरे एकल पर वापस रिपोर्ट करें। मुझे CPAN प्रलेखन के अनुसार काम करने के लिए कवर फ़िल्टरिंग नहीं मिल सकती है!)
अब यदि आप अपनी शीर्ष स्तर की निर्देशिका को ताज़ा करते हैं, तो आप "cover_db" नामक एक नई उपनिर्देशिका देख सकते हैं। उस निर्देशिका में जाएं और अपने पसंदीदा वेब ब्राउज़र में कोड कवरेज रिपोर्ट खोलने के लिए "कवरेज.html" फ़ाइल पर डबल क्लिक करें। यह आपको एक अच्छा रंग कोडित हाइपरटेक्स्ट रिपोर्ट देता है जहां आप अपने फ़ाइल नाम पर क्लिक कर सकते हैं और वास्तविक स्रोत कोड के बगल में रिपोर्ट में अपने पर्ल मॉड्यूल के लिए विस्तृत विवरण, शाखा, स्थिति, सबरूटीन कवरेज आँकड़े देख सकते हैं। आप इस रिपोर्ट में देख सकते हैं कि हमने "अलविदा ()" दिनचर्या को कवर नहीं किया था और कोड की एक पंक्ति भी है जो कि पहुंच से बाहर है जो कि अपेक्षित रूप से कवर नहीं किया गया था।
(स्रोत: leucht.com )
एक और चीज जो आप अपने IDE में इस प्रक्रिया को स्वचालित करने में मदद कर सकते हैं वह है कुछ और "Build.PL" प्रकार की फाइलें बनाना जो स्पष्ट रूप से कुछ निर्माण लक्ष्य बनाते हैं जो हमने कमांड लाइन से मैन्युअल रूप से ऊपर किए थे। उदाहरण के लिए, मैं निम्नलिखित सामग्री के साथ "BuildTest.PL" फ़ाइल का उपयोग करता हूं:
use strict;
use warnings;
use Module::Build;
my $build = Module::Build->resume (
properties => {
config_dir => '_build',
},
);
$build->dispatch('build');
$build->dispatch('test');
फिर मैंने एक ही माउस क्लिक के साथ इस फ़ाइल ("पर्ल बिल्डटेस्ट.पीएल" के माध्यम से) को निष्पादित करने के लिए अपना आईडीई सेट किया और यह स्वचालित रूप से कमांड लाइन से मैन्युअल रूप से करने के बजाय आईडीई से मेरे यूनिट परीक्षण कोड को चलाता है। स्वचालित कोड कवरेज निष्पादन के लिए "प्रेषण (" परीक्षण ') को "प्रेषण (' टेस्टकवर ')" से बदलें। मॉड्यूल :: बिल्ड से उपलब्ध लक्ष्य की पूरी सूची के लिए "बिल्ड सहायता" टाइप करें।
Build build
और फिरBuild test
?