1 / 32

TestCover

TestCover. Introductie in Test::More en Devel::Cover. use Workshop::Perl::Dutch 2; date( ‘2005-02-25’ ); author( abeltje => ‘Abe Timmerman’ );. Gang van zaken. Documentatie Broncode Eerste tests Meer tests Dekking van de tests Meer tests Meer dekking. Serialize::Hash (doc1). NAME

oral
Download Presentation

TestCover

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TestCover Introductie in Test::More en Devel::Cover use Workshop::Perl::Dutch 2; date( ‘2005-02-25’ ); author( abeltje => ‘Abe Timmerman’ ); TestCover/abeltje

  2. Gang van zaken • Documentatie • Broncode • Eerste tests • Meer tests • Dekking van de tests • Meer tests • Meer dekking TestCover/abeltje

  3. Serialize::Hash (doc1) NAME Serialize::Hash - Een OO module om gegevens in een hash te serialiseren SYNOPSIS use Serialize::Hash; my %persoon = ( vnaam => 'Piet', mnaam => 'de', anaam => 'Vries' ); my $naam = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )], data => \%persoon ); printf "Naam is: '%s'\n", $naam->serialize; $naam->keys(qw( anaam vnaam mnaam )); printf "Naam is: '%s'\n", $naam->serialize; TestCover/abeltje

  4. Serialize::Hash (doc2) Serialize::Hash->new( %options ) De contructor heeft drie mogelijke argumenten: keys => \@fieldlist (verplicht) Een arrayref met de key-namen uit de data-hash in de volgorde waarin ze aan elkaar geplakt moeten worden. Als het "keys" argument niet wordt meegegeven, zal de constructor de uitvoer van het programma stoppen met behulp van "croak()". data => \%data Een hashref die de data bevat. separator => '*separator-string*' Een string die wordt gebruikt om de verschillende delen aan elkaar te plakken. De verstek waarde is een spatie. TestCover/abeltje

  5. Serialize::Hash (doc3) $sh->keys( \@fieldlist ) Met de "keys()" method kan je nieuwe keys of een nieuwe volgorde instellen. Deze method retourneert het vernieuwde object. my $str = $sh->keys( \@newfields )->serialize; Als het argument niet een arrayref is, zal de method de uitvoer van het programma stoppen met behulp van "croak()". $sh->data( \%data ) Met de "data()" method kan je nieuwe data aan het object toe kennen. Deze method retourneert het vernieuwde object. my $str = $sh->keys( \%data )->serialize; Als het argument niet een hashref is, zal de method de uitvoer van het programma stoppen met behulp van "croak()". TestCover/abeltje

  6. Serialize::Hash (doc4) $sh->separator( $sep ) Met de "separator()" method kan je een nieuwe scheidings-string instellen of opvragen. Deze method retourneert het vernieuwde object als een waarde werd meegegeven anders de waarde van de scheidings-string. my $sep = $sh->separator; my $str = $sh->separator( '.' )->serialize; $sh->serialize De "serialize()" method zal alle (aanwezige) waarden die bij de gedefinieerde keys horen aan elkaar plakken met de scheidings-string er tussen. TestCover/abeltje

  7. Serialize::Hash (src1) sub keys { my $self = shift; croak "Usage: \$sh->keys( \\\@keys )" unless ref $_[0] eq 'ARRAY'; $self->{_keys} = shift; return $self; } sub data { my $self = shift; croak "Usage: \$sh->data( \\\%data )" unless ref $_[0] eq 'HASH'; $self->{_data} = shift; return $self; } TestCover/abeltje

  8. Serialize::Hash (src2) sub separator { my $self = shift; return $self->{_sep} unless @_; $self->{_sep} = shift; return $self; } sub serialize { my $self = shift; my $data = $self->{_data}; my @vals = map $data->{ $_ } => grep exists $data->{ $_ } && $data->{ $_ } => @{ $self->{_keys} }; return join $self->{_sep}, @vals; } TestCover/abeltje

  9. Serialize::Hash (src3) sub new { my $class = shift; my %opt = @_; croak "Usage: Serialize::Hash->new( keys => \\\@keys )" unless exists $opt{keys}; my $self = bless {}, $class; for my $item (qw( keys data separator )) { next unless exists $opt{ $item }; $self->$item( $opt{ $item } ); } return $self; } TestCover/abeltje

  10. Perl test framework • Eenvoudig te begrijpen • Een test slaagt of niet • Slaagt melding: ok # • Slaagt niet melding: not ok # • Test::More • Defacto standaard • Test::Harness / prove • Rapportage van gerunde tests TestCover/abeltje

  11. Test::More • Telt zelf de tests • Eenvoudige functies • ok() • is() • is_deeply() • like() • use_ok() • isa_ok() TestCover/abeltje

  12. Eerste tests #! perl -w use strict; use Test::More 'no_plan'; use_ok 'Serialize::Hash'; { my %persoon = ( vnaam => 'Piet', mnaam => 'de', anaam=> 'Vries' ); my $sh = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )], data => \%persoon, ); isa_ok $sh, 'Serialize::Hash'; is $sh->serialize, 'Piet de Vries', "Voorbeeld uit de documentatie"; is $sh->keys( [qw( anaam vnaam mnaam )] )->serialize, 'Vries Piet de', "Nieuwe volgorde"; } TestCover/abeltje

  13. Demorun prove stage1/t/basic.t TestCover/abeltje

  14. Serialize::Hash (src4) sub new { my $class = shift; my %opt = @_; croak "Usage: Serialize::Hash->new( keys => \\\@keys )" unless exists $opt{keys}; my $self = bless {}, $class; for my $item (qw( keys data separator )) { next unless exists $opt{ $item }; $self->$item( $opt{ $item } ); } $self->{_sep} = " " unless exists $self->{_sep}; return $self; } TestCover/abeltje

  15. Demorun prove stage2/t/basic.t TestCover/abeltje

  16. Meer tests { my $sh = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )] ); isa_ok $sh, 'Serialize::Hash'; { my $new_sh = $sh->data( {vnaam => 'Abe', anaam => 'Timmerman'} ); isa_ok $new_sh, 'Serialize::Hash'; is_deeply $new_sh, $sh, "Zelfde objecten"; my $str1 = $sh->serialize; is $str1, 'Abe Timmerman', "\$sh->serialize"; is $new_sh->serialize, $str1, "\$new_sh->serialize eq \$sh->serialize"; } { is $sh->separator, ' ', "Scheidingsteken"; my $new_sh = $sh->separator( '.' ); isa_ok $new_sh, 'Serialize::Hash'; is $sh->serialize, 'Abe.Timmerman', "Nieuw scheidingsteken"; } } TestCover/abeltje

  17. Demorun prove stage2/t/*.t TestCover/abeltje

  18. Dekking van testcode • Devel::Cover • stmt: statement coverage • branch: takken • if, unless, ?: • cond: condities • &&, || • Rapport in HTML TestCover/abeltje

  19. Genereren van dekkings data • cover -delete • Oude data verwijderen • HARNESS_PERL_SWITCHES=-MDevel::Cover prove -l t/*.t • Voer de tests uit en verzamel dekkings data • cover • Maak het rapport TestCover/abeltje

  20. Demorun coverage stage2/t/*.t TestCover/abeltje

  21. Nog meer tests (1) { my $sh = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )], data => {vnaam => 'Abe', mnaam => '', anaam => 'Timmerman'}, separator => '*', ); isa_ok $sh, 'Serialize::Hash'; is $sh->serialize, 'Abe*Timmerman', "serialize"; } TestCover/abeltje

  22. Nog meer tests (2) { # croak bij geen keys veld my $sh = eval { Serialize::Hash->new() }; my $err = $@; like $err, qr/Usage:\ Serialize::Hash->new\(\ keys\ =>\ \\\@keys\ \) \s+ at\ .+\ line\ \d+/x, "croak in constructor"; } { # Data not a hashref my $sh = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )] ); eval { $sh->data( vnaam => 'Abe', anaam => 'Timmerman' ) }; my $err = $@; like $err, qr/Usage:\ \$sh->data\(\ \\\%data\ \) \s+ at\ .+\ line\ \d+/x, "croak in data()"; } { # keys not an arrayhref my $sh = eval { Serialize::Hash->new( keys => qw( vnaam mnaam anaam ) ) }; my $err = $@; like $err, qr/Usage:\ \$sh->keys\(\ \\\@keys\ \) \s+ at\ .+\ line\ \d+/x, "croak in keys()"; } TestCover/abeltje

  23. Demorun coverage stage3/t/*.t TestCover/abeltje

  24. 100% dekking niet alles • Nog steeds bugs mogelijk • Geen dekkings data voor regexen • overload TestCover/abeltje

  25. Overload toevoegen package Serialize::Hash; use strict; use warnings; use Carp; use overload '""' => \&serialize, fallback => 1; sub new { TestCover/abeltje

  26. Demorun coverage stage4/t/*.t TestCover/abeltje

  27. Overload tests #! perl use strict; use warnings; use Test::More 'no_plan'; use_ok 'Serialize::Hash'; my $sh = Serialize::Hash->new( keys => [qw( vnaam mnaam anaam )], data => {vnaam => 'Abe', anaam => 'Timmerman'}, ); isa_ok $sh, 'Serialize::Hash'; is $sh, 'Abe Timmerman', "overloaded stringify ($sh)"; TestCover/abeltje

  28. Demorun prove stage4/t/overload/*.t TestCover/abeltje

  29. Vragen? TestCover/abeltje

  30. Dank voor de aandacht TestCover/abeltje

  31. Silly Bonus TestCover/abeltje

  32. Sillyer Bonus TestCover/abeltje

More Related