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

Slides:



Advertisements
Verwante presentaties
The stock market will go up De beurswaarden zullen stijgen YESNO JA NEEN Is Jefken a good person ? Is Jefken een goed mens ? YES NO JA NEEN Is Lonny a.
Advertisements

KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
Order placed Should be Nederland Netherlands can be removed here, just Scancorner Instead of ‘undefined’ -> ‘geen’ New logo should be displayed here. COUNTS.
Een alternatief voorstel Naar aanleiding van bestudering van de IAASB voorstellen denkt de NBA na over een alternatief. Dit alternatief zal 26 september.
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
JQuery en ASP.NET Bart De Meyer.
Conditional Clauses If-zinnen.
Thursday, 10 July 2014 donderdag 10 juli 2014 Click Klik.
Programmeren in Java met BlueJ
Practica Computerlinguistiek Tekst en uitleg:
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
SQL VOOR BIOLOGEN © 2011 M.L. Hekkelman CMBI Radboud UMC.
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
© Stichting HL7 Nederland Basiscomponenten Snelstartsessie Identificatie, II en PN.
AAHA (voor intern gebruik)
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
Elizabeth Mattijsen Eerste Nederlandse Perl Workshop 5 maart 2004 Parsing XML / HTML.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Reusable Components and Subsystems Ahmed Lamkanfi Bart Meyers Karen Segers.
Hoofdstuk 6: Controle structuren
Server side scripting 1 Webtechnologie Lennart Herlaar.
Copyright met toestemming gebruikt van Stichting Licentie © Chr. Art. Music / Continental Sound 1/8 IN MOMENTS LIKE THESE (David Graham) In moments.
Copyright met toestemming gebruikt van Stichting Licentie © 1997 Hillsongs Australia 1/11 ALL THINGS ARE POSSIBLE (Darlene Zschech) 1. Almighty God my.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
Creatieve workshop Wiki: Scroll naar beneden: docentenpagina: Pia Terstroet.
Inleidend probleem Data structuur (hiërarchie van classes)
Databases I (H.3) Het Entity-Relationship Model Wiebren de Jonge Vrije Universiteit, Amsterdam versie 2003.
GESPRG Les 12 Gestructureerd programmeren in C. 152 Huiswerk Uitwerking void reverse(int a[], int n) { int first = 0, last = n - 1; while (first < last)
Opgave 1a: afronden int n=5; double a, b, c, d; a = n * 1.5; b = n * 3 / 2; c = n / 2 * 3; d = 3 / 2 * n; a b c d
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
CONTROLESTRUCTUREN (DEEL 2)
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
De digitale coach Het verbeteren van een plan van aanpak Steven Nijhuis, coördinator projecten FNT Deze presentatie staat op:
De digitale coach Het verbeteren van een plan van aanpak Steven Nijhuis, coördinator projecten FNT Deze presentatie staat op:
Hibernate Object relational mapping
zondag 3 augustus 2014 Click Klik Sunday, 03 August 2014.
Algoritmiek Strings & Stringmanipulaties; Controle Structuren; Floating-point notation. Hoorcollege 4 - Ma. 25 sept L.M. Bosveld-de Smet.
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Hoofdstuk 5 – Object Based Programmeren
1 HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1. INTRODUCTIE  Vervolg discussie omtrent gestructureerd programmeren  Introductie van de overblijvende controlestructuren.
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology ; PIC assember programeren 1 Les 3 - onderwerpen Het.
DU2PRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Beginselen van C opgaves… volgende week: ARM.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag GUI  command line redirection.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Arrays.
Presenteert:.
Deltion College Engels C1 Spreken/Presentaties [Edu/006] thema ‘I hope to convince you of… ‘ can-do : kan een standpunt uiteenzetten voor een publiek van.
Deltion College Engels B1 Schrijven [Edu/004]/ subvaardigheid lezen thema: reporting a theft can-do : kan formulieren waarin meer informatie gevraagd wordt,
1 december KC Development Tools Hands-on Oracle HTML DB v2.0.
DSpace-gebruikersdag 9 maart 2006 WildFire ● WildFire is ontwikkeld door Henk Druiven, Rijksuniversiteit Groningen Met dank aan Johannes Nicolai en al.
TOPIC O: Pointers | pag. 1 Pointer = adres in het geheugen, is zelf geen geheugen! Expliciet geheugen aanvragen vóór gebruik.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 2 definitie.
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
‘Inleiding objectgeoriënteerd programmeren met PHP’ ‘Inleiding’
Gameprogrammeren: Arrays
Transcript van de presentatie:

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

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

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;

25 feb 2005TestCover/abeltje4 Serialize::Hash (doc2) Serialize::Hash->new( %options ) De contructor heeft drie mogelijke argumenten: keys => (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.

25 feb 2005TestCover/abeltje5 Serialize::Hash (doc3) $sh->keys( ) Met de "keys()" method kan je nieuwe keys of een nieuwe volgorde instellen. Deze method retourneert het vernieuwde object. my $str = $sh->keys( )->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()".

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.

25 feb 2005TestCover/abeltje7 Serialize::Hash (src1) sub keys { my $self = shift; croak "Usage: \$sh->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; }

25 feb 2005TestCover/abeltje8 Serialize::Hash (src2) sub separator { my $self = shift; return $self->{_sep} $self->{_sep} = shift; return $self; } sub serialize { my $self = shift; my $data = $self->{_data}; = map $data->{ $_ } => grep exists $data->{ $_ } && $data->{ $_ } $self->{_keys} }; return join }

25 feb 2005TestCover/abeltje9 Serialize::Hash (src3) sub new { my $class = shift; my %opt croak "Usage: Serialize::Hash->new( 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; }

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

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

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"; }

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

25 feb 2005TestCover/abeltje14 Serialize::Hash (src4) sub new { my $class = shift; my %opt croak "Usage: Serialize::Hash->new( 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; }

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

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"; }

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

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

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

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

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"; }

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\ =>\ \) \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\(\ \) \s+ at\.+\ line\ \d+/x, "croak in keys()"; }

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

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

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

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

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

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

25 feb 2005TestCover/abeltje29 Vragen?

25 feb 2005TestCover/abeltje30 Dank voor de aandacht

25 feb 2005TestCover/abeltje31 Silly Bonus

25 feb 2005TestCover/abeltje32 Sillyer Bonus