SORU
10 ŞUBAT 2009, Salı


Yapı, birim testi, Perl kod kapsama: tam Bir çalışma örneği

Süreç ve birim test ve kod kapsamı Perl yapı açısından bulduğum en Stackoverflow cevaplar sadece bana belgeleri için CPAN işaret. Tam belgeleri bulunması gerekiyor çünkü kesinlikle CPAN modülleri işaret ile yanlış bir şey var. Sorun birçok durumda çalışan kod örnekleri, gerçi tam bulmak zorundaydım.

Ben aradım İnternet üzerinden gerçek çalışma kod örnekleri, bir şey indirmek veya hamur haline benim IDE, gibi tipik öğretici "Hello World" örnek kaynak kodu, ama bir örnek gösterir oluşturma işlemi ile birim testi kod kapsamı analizi. Herkes bu teknolojileri ve süreçleri gösteren tam çalışan bir projenin küçük bir örneği var mı?

(Küçük bir çalışma örneği var ve kendi soruma cevap veririm ama muhtemelen karşıma çıkan olanlar daha iyi örnekler var ve kullanıcılar da vardır.)

CEVAP
10 ŞUBAT 2009, Salı


Aldı beni bir süre için ve sonra da aldı beni alarak küçük parçacıkları bir dizi farklı kaynaklardan ve erime onlarla birlikte, ama sanırım ben küçük bir örnek çalışma yeterince gösterir bir acemi Perl Perl inşa süreci de dahil olmak üzere birim test ve kod kapsama analizi ve raporlama. (ActiveState ActivePerl v5 kullanıyorum.10.PC, Module::Build, Test::More, Devel::Cover) XP Pro Windows 0

Perl projeniz için bir dizin ile başlar ve daha sonra "" dizin ve "" proje dizini altında dizin: t lib oluşturma

HelloPerlBuildWorld
        |
        |----------> lib
        |
        |----------> t

"Dizin, metin dosyası" HelloPerlBuildWorld.oluşturun lib". pm Bu dosya ve testleri inşa edilecek Perl modülü. Bu dosyaya aşağıdaki içeriği yapıştırın:

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;

"Dizin, metin dosyası" HelloPerlBuildWorld.adlı t". t Bu dosya tamamen Perl module üstünde test etmek için çalışacaktır birim test senaryon. Bu dosyaya aşağıdaki içeriği yapıştırın:

use strict;
use warnings;
use Test::More qw(no_plan);

# Verify module can be included via "use" pragma
BEGIN { use_ok('HelloPerlBuildWorld') };

# Verify module can be included via "require" pragma
require_ok( 'HelloPerlBuildWorld' );

# Test hello() routine using a regular expression
my $helloCall = HelloPerlBuildWorld::hello();
like($helloCall, qr/Hello, .*World/, "hello() RE test");

# Test hello_message() routine using a got/expected routine
is($helloCall, "Hello, Perl Build World!", "hello() IS test");

# Do not test bye() routine

# Test repeat() routine using a got/expected routine
for (my $ctr=1; $ctr<=10; $ctr  ) {
    my $repeatCall = HelloPerlBuildWorld::repeat();
    is($repeatCall, 1, "repeat() IS test");
}

# Test argumentTest() 
my $argumentTestCall1 = HelloPerlBuildWorld::argumentTest();
is($argumentTestCall1, "null", "argumentTest() IS null test");

# Test argumentTest("true") 
my $argumentTestCall2 = HelloPerlBuildWorld::argumentTest("true");
is($argumentTestCall2, "true", "argumentTest() IS true test");

# Test argumentTest("false") 
my $argumentTestCall3 = HelloPerlBuildWorld::argumentTest("false");
is($argumentTestCall3, "false", "argumentTest() IS false test");

# Test argumentTest(123) 
my $argumentTestCall4 = HelloPerlBuildWorld::argumentTest(123);
is($argumentTestCall4, "unknown", "argumentTest() IS unknown test");

Şimdi en üst düzeyde geri proje dizini adlı bir metin dosyası oluştur"". Build.PL Bu dosya daha sonra kullanacağınız inşa betiklerini oluşturur. Bu dosyaya aşağıdaki içeriği yapıştırın:

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();

İhtiyacınız olan tüm dosyaları. Üst düzey komut satırından şimdi dizini, aşağıdaki komutu yazın.:

perl Build.PL

Aşağıdakine benzer bir şey göreceksiniz:

Checking prerequisites...
Looks good

Creating new 'Build' script for 'HelloPerlBuildWorld' version '0.1'

Şimdi aşağıdaki komut ile birim testleri çalıştırmak mümkün olmalıdır:

Build test

Ve buna benzer bir şey

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)

Kod kapsama analizi ile birim testleri çalıştırmak için, bu deneyin:

Build testcover

Ve bu sipariş üzerine bir şey göreceksiniz:

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.

(Birisi yazdığım Kapak tüm Perl kütüphaneleri dışında görmezden yapılandırmak ve sadece bana rapor tek dosyamı nasıl söyle lütfen. Kapak CPAN belgelerine göre çalışmak için filtreleme alamadım!)

Şimdi ise üst düzey dizin yenilerseniz, yeni bir alt dizin olarak adlandırılan görebilirsiniz"". cover_db Bu dizine gidin ve çift tıklatın "coverage.html" favori web tarayıcı içinde kod kapsama rapor açmak için dosya. Sabahları güzel bir renk kodlu köprü raporu nerede tıklayabilirsiniz üzerinde dosya ve bakın detaylı açıklama, şube, durum, yordam kapsama istatistikler için Perl modülü orada rapor gelecek için gerçek bir kaynak kodu. Kapak olmadığımız bu raporda görebilirsiniz "() hoşça kal" rutin ve de beklediğimiz gibi kapalı değil, ulaşılamaz bir kod satırı var.

snapshot of code coverage report

Bir şey daha yardımcı olabileceğin bu işlemi otomatik olarak IDE olduğu için biraz daha fazla "Build.PL" tip dosyalar açıkça gerçekleştirmek bazı inşa hedefleyen yaptığımız yukarıdaki el ile komut satırından. Örneğin, "BuildTest.PL" aşağıdaki içerik dosyası: . bir kullanıyorum

use strict;
use warnings;
use Module::Build;

my $build = Module::Build->resume (
  properties => {
    config_dir => '_build',
  },
);

$build->dispatch('build');
$build->dispatch('test');

O zaman ben kurmak benim IDE çalıştırmak için bu dosyayı () "perl BuiltTest.PL" bir tek fare tıklatın ve otomatik olarak çalışır benim birim test kodu IDE yerine ben yapıyorum el ile komut satırından. Replace "('') test" "('') testcover" otomatik kod kapsamı için yürütme. posta ile gönderme ""Modülü tarafından sağlanan inşa hedefler tam listesi için::İnşa. İnşa yardım türü

Bu cevap orada birisi yardımcı olur umarım. Utanmana gerek yok ... lütfen bu cevap için bir yorum ekleyin yukarıya veya aşağıya cevap yardım ettin ya bana oy verin. Eğer bu cevap bir şey hakkında bir kusurum varsa, yorum lütfen ve en kısa zamanda düzelteceğim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndyMcMillinTV

    AndyMcMillin

    6 HAZİRAN 2007
  • Brendan van Son

    Brendan van

    5 Aralık 2006
  • krotoflik

    krotoflik

    26 ŞUBAT 2011