serialize; $naam->keys(qw( anaam vnaam mnaam )); printf "Naam is: '%s'\n", $naam->serialize;"> serialize; $naam->keys(qw( anaam vnaam mnaam )); printf "Naam is: '%s'\n", $naam->serialize;">

De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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

Verwante presentaties


Presentatie over: "25 feb 2005TestCover/abeltje1 TestCover Introductie in Test::More en Devel::Cover use Workshop::Perl::Dutch 2; date( ‘2005-02-25’ ); author( abeltje =>"— Transcript van de presentatie:

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

2 25 feb 2005TestCover/abeltje2 Gang van zaken Documentatie Broncode Eerste tests Meer tests Dekking van de tests Meer tests Meer dekking

3 25 feb 2005TestCover/abeltje3 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;

4 25 feb 2005TestCover/abeltje4 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.

5 25 feb 2005TestCover/abeltje5 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()".

6 25 feb 2005TestCover/abeltje6 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.

7 25 feb 2005TestCover/abeltje7 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; }

8 25 feb 2005TestCover/abeltje8 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; }

9 25 feb 2005TestCover/abeltje9 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; }

10 25 feb 2005TestCover/abeltje10 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

11 25 feb 2005TestCover/abeltje11 Test::More Telt zelf de tests Eenvoudige functies –ok() –is() –is_deeply() –like() –use_ok() –isa_ok()

12 25 feb 2005TestCover/abeltje12 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"; }

13 25 feb 2005TestCover/abeltje13 Demorun prove stage1/t/basic.t

14 25 feb 2005TestCover/abeltje14 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; }

15 25 feb 2005TestCover/abeltje15 Demorun prove stage2/t/basic.t

16 25 feb 2005TestCover/abeltje16 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"; }

17 25 feb 2005TestCover/abeltje17 Demorun prove stage2/t/*.t

18 25 feb 2005TestCover/abeltje18 Dekking van testcode Devel::Cover –stmt: statement coverage –branch: takken if, unless, ?: –cond: condities &&, || Rapport in HTML

19 25 feb 2005TestCover/abeltje19 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

20 25 feb 2005TestCover/abeltje20 Demorun coverage stage2/t/*.t

21 25 feb 2005TestCover/abeltje21 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"; }

22 25 feb 2005TestCover/abeltje22 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()"; }

23 25 feb 2005TestCover/abeltje23 Demorun coverage stage3/t/*.t

24 25 feb 2005TestCover/abeltje24 100% dekking niet alles Nog steeds bugs mogelijk Geen dekkings data voor regexen overload

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

26 25 feb 2005TestCover/abeltje26 Demorun coverage stage4/t/*.t

27 25 feb 2005TestCover/abeltje27 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)";

28 25 feb 2005TestCover/abeltje28 Demorun prove stage4/t/overload/*.t

29 25 feb 2005TestCover/abeltje29 Vragen?

30 25 feb 2005TestCover/abeltje30 Dank voor de aandacht

31 25 feb 2005TestCover/abeltje31 Silly Bonus

32 25 feb 2005TestCover/abeltje32 Sillyer Bonus


Download ppt "25 feb 2005TestCover/abeltje1 TestCover Introductie in Test::More en Devel::Cover use Workshop::Perl::Dutch 2; date( ‘2005-02-25’ ); author( abeltje =>"

Verwante presentaties


Ads door Google