PHPUnit Ricettario Del Programmatore Scontroso



Documenti analoghi
A me è piaciuto molto il lavoro in aula computer perché era a coppie e poi ho potuto imparare ad usare il computer. Anche il

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

TRUCCHI PER GIMP - Elemento a colori in foto bianco e nero

Università per Stranieri di Siena Livello A1

TNT IV. Il Diavolo è meno brutto di come ce lo dipingono!!! (Guarda il video)

Esercizi su. Funzioni

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Note per scaricare e installare il software cliccando alla pagina DOWNLOAD del sito,

File, Modifica, Visualizza, Strumenti, Messaggio

My name is... (Nome) I study at... (Nome della scuola) I m in class... (Classe) I am starting this English Language Biography on...

IL MODELLO CICLICO BATTLEPLAN

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

Le basi della Partita Doppia in parole Facile e comprensibile. Ovviamente gratis.

Insegnare può essere facile

Internet i vostri figli vi spiano! La PAROLA-CHIAVE: cacao Stralci di laboratorio multimediale

Trascrizione completa della lezione Lezione 002

Dizionario Italiano/Lingua dei segni italiana

Il programmatore che c e in noi Lezione 12 Statements

1. Presentazione del programma. 3. Metodologia didattica e contenuti. 4. L organizzazione della lezione in aula sincrona

Pulire IM. Non tutti sanno che solo una corretta e regolare pulizia nelle cartelle di IM, assicura un funzionamento longevo del programma

VIX INDICATOR Come calcolare con il VIX il punto da dove inizierà un ribasso o un rialzo

Ciao, intanto grazie per essere arrivato/a fin qui.

AUTOREGOLAZIONE PER IL COMPITO

Come Calcolare un Preventivo RC Auto. Seguimi su. Marco Venturi Intermediario Assicurativo. MarcoVenturi10

Corso su LINQ Lezione 16. Introduzione

PROMUOVERSI MEDIANTE INTERNET di Riccardo Polesel. 1. Promuovere il vostro business: scrivere e gestire i contenuti online» 15

Da:

Aggiornamento del Database Distrettuale: guida per i segretari dei club

«Documentazione dell'apprendimento»

UNITÀ PRIMI PASSI. Ciao nel mondo. surfist. 1 Conosciamoci!

Modulo 4: Ereditarietà, interfacce e clonazione

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

INTRODUZIONE I CICLI DI BORSA

LA TERAPIA DELLA RICONCILIAZIONE

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

LE MEDIE MOBILI CENTRATE

IPERCA. Il metodo a sei fasi Per gestire con successo progetti, incarichi e situazioni di vita e per accrescere continuamente l esperienza.

Guida alla configurazione della posta elettronica dell Ateneo di Ferrara sui più comuni programmi di posta

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

IL MIO PRIMO SITO: NEWS

risulta (x) = 1 se x < 0.

Il puzzle di Einstein. di Davide Dellerba.

Utilizzare il fax di windows (XP)

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Brand Il primo corso per gli imprenditori che vogliono imparare l arma segreta del Brand Positioning Introduzione

Guida informatica per l associazione #IDEA

Sarà del tutto identico a come se giocassimo 4 schedine da 2 euro ciascuna così fatte, avremo quindi 4 combinazioni:

Guida Creazioni Annunci

Statistica e biometria. D. Bertacchi. Variabili aleatorie. V.a. discrete e continue. La densità di una v.a. discreta. Esempi.

Uso dei modelli/template

Formattazione. ü Introduzione

DOCUMENTO ESPLICATIVO

1. Scrivere ad amici e parenti

PLIDA Progetto Lingua Italiana Dante Alighieri Certificazione di competenza in lingua italiana

Il concetto di Dare/Avere

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana

COME UTILIZZARE ARCHIVE-HOST

RISOLUTORE AUTOMATICO PER SUDOKU

ALTRI SUGGERIMENTI PER IL PERCORSO AD OSTACOLI

I dubbi relativi all emissione della polizza

Obiettivo Principale: Spiegare come la stessa cosa possa essere realizzata in molti modi diversi e come, a volte, ci siano modi migliori di altri.


[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

La mia autostima. Edizioni Erickson. Deborah Plummer. Dario Ianes Centro Studi Erickson Università di Bolzano

Ecco come ho posizionato in 1 pagina di Google la keyword Strategie di marketing, da 1500 ricerche al mese

IL RISCHIO DI INVESTIRE IN AZIONI DIMINUISCE CON IL PASSARE DEL TEMPO?

Centro Copia. TESI di LAUREA. LISTINO PREZZI (iva inclusa)

Office 2007 Lezione 08

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

COME SCARICARE GLI EBOOK E COME USARLI CONSIGLI PASSO PER PASSO. Prendere l'elenco dei libri di testo adottati e che dovrete comprare

GB informazioni e freeware

per scrivere un articolo da prima pagina! per inviare una newsletter Come si crea Comunicazione Anfaa Edizione 4a.2013

Non ho idea se è la prima volta che vedi un mio prodotto oppure se in passato le nostre strade si sono già incrociate, poco importa

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

WEBCONFERENCE. La lezione a casa

Memory Fitness TECNICHE DI MEMORIA

Google AdWords. Corrispondenze Parole Chiave

TNT IV. Il Diavolo è meno brutto di come ce lo dipingono!!! (Guarda il video)

Innanzitutto andiamo sul sito ed eseguiamo il download del programma cliccando su Download Dropbox.

INVIO SMS

INSTALLAZIONE JOOMLA

Tale attività non è descritta in questa dispensa

SHOCKSMS SMS SENZA LIMITI. Invia SMS al tuo elenco di contatti in tempo reale. Basta un pc, una chiavetta internet ed una SIM telefonica

Attività Descrizione Materiali utilizzati

Introduzione a Emptypage FTP. I problemi che il software Emptypage FTP si propone di risolvere sono: Usare il tutorial

3. Installare Wamp Server

Quando uso il telefono ho dei dirittti


Nina Cinque. Guida pratica per organizzarla perfettamente in una sola settimana! Edizioni Lefestevere

L economia: i mercati e lo Stato

Software Gestionale per alberghi e strutture ricettive

LABORATORIO DI INFORMATICA parte 6 -

Guida all uso di Java Diagrammi ER

INTRODUZIONE PRATICA AL LEAN MANAGEMENT

Copyright

Funzioni in C. Violetta Lonati

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Università per Stranieri di Siena Livello A1

Transcript:

PHPUnit Ricettario Del Programmatore Scontroso Chris Hartjes and Pietro Alberto Rossi This book is for sale at http://leanpub.com/phpunitricettariodelprogrammatorescontroso This version was published on 2014-03-24 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do. 2014 Chris Hartjes and Pietro Alberto Rossi

Indice Introduzione.......................................... 1 Data Provider......................................... 2 Perchè dovreste usare un Data Provider.......................... 2 Uno sguardo a tutti i questi test.............................. 2 Creare Data Provider.................................... 3 Esempi più complessi.................................... 4 Data Provider Trick..................................... 5

Introduzione Quando ho scritto il libro The Grumpy Programmer s Guide To Building Testable Applications In PHP il mio obiettivo era di insegnare alle persone come scrivere codice che può essere facilmente testato. Ci sono molte informazioni su come usare i vari tools per il testing ma non ero molto d accordo con questi. Utilizzando il vostro motore di ricerca, trovate come risolvere determinati casi, ma è difficile trovare un posto che vi mostri varie soluzioni se non di basso livello. Ho fatto molte ricerche. Mi sono iscritto ad un fantastico corso, product development, cominciai a fare ancora più ricerche, e ho iniziato a creare una soluzione che ero sicuro avrebbe aiutato le persone a risolvere la sofferenza nello scrivere test per il loro codice PHP utilizzando PHPUnit. Il risultato in questo libro. Ho provato a realizzare vari esempi di codice compresivi di spiegazioni sulle decisioni prese per scriverli. Non penso che questo sia un libro che leggerete fino alla fine. E molto più probabile che finirete per utilizzarlo un capitolo per volta, imparando le competenze di solo una parte del processo di testing. Come sempre, sono benvenuti i vostri feedback via Twitter e App.net (@grmpyprogrammer) o via email all indirizzo chartjes@littlehart.net. Per la versione italiana @sprik89 o mail a pietroalberto.rossi@gmail.com.

Data Provider Perchè dovreste usare un Data Provider Uno dei principali obiettivi che ci dovrebbe sempre essere è scrivere il minor codice possibile per risolvere un determinato problema. Questo non è differente quando si tratta di test, che sono veramente nulla di più che codice. Una delle prime lezioni che ho imparato è che quando ho iniziato a scrivere quello che leggevo sulle test suite è la ricerca di duplicazioni nei test. Ecco un esempio di una situazione in cui questo può accadere. Molti programmatori avranno familiarità con il problema di FizzBuzz¹, se non altro perché è comunemente presentato come un problema da risolvere come parte di un colloquio. In mia opinione, è un buon problema da presentare perchè tocca vari aspetti reali della programmazione di base. Quando scrivete test per FizzBuzz, quello che dovete fare è passare un set di valori e verificare che loro sono FizzBuzzed correttamente. Il risultato è avere test multipli identici ma che differiscono per il valore con cui li testate. I data provider vi permettono di semplificare questo processo. Un data provider è un modo per creare set multipli di dati da testare che possono essere passati ad un test method come parametro. Voi create un metodo che è disponibile nella classe ed il tuo test ritornerà un array di valori che coincideranno con i parametri che state passando al test. Lo so, suona molto complicato di quanto realmente lo è. Guardiamo un esempio. Uno sguardo a tutti i questi test Se non sapete cosa è un data provider, i FizzBuzz test a cosa possono assomigliare!? 2 class FizzBuzzTest extends PHPUnit_Framework_Testcase 3 { 4 public function setup() 5 { 6 $this->fb = new FizzBuzz(); 7 } 8 9 public function testgetfizz() 10 { ¹http://en.wikipedia.org/wiki/FizzBuzz

Data Provider 3 11 $expected = 'Fizz'; 12 $input = 3; 13 $response = $this->fb->check($input); 14 $this->assertequals($expected, $response); 15 } 16 17 public function testgetbuzz() 18 { 19 $expected = 'Buzz'; 20 $input = 5; 21 $response = $this->fb->check($input); 22 $this->assertequals($expected, $response); 23 } 24 25 public function testgetfizzbuzz() 26 { 27 $expected = 'FizzBuzz'; 28 $input = 15; 29 $response = $this->fb->check($input); 30 $this->assertequals($expected, $response); 31 } 32 33 function testpassthru() 34 { 35 $expected = '1'; 36 $input = 1; 37 $response = $this->fb->check($input); 38 $this->assertequals($expected, $response); 39 } 40 } Sono sicuro che vedete il pattern: multipli valori di input test estremamente simili in configurazione ed esecuzione stesse asserzioni Creare Data Provider Un data provider è un altro metodo nella vostra classe test che ritorna un array di risultati, dove ogni risultato è un array stesso. PHPUnit converte il risultato di ritorno in parametri di input che il test accetta.

Data Provider 4 2 public function fizzbuzzprovider() 3 { 4 return array( 5 array(1, '1'), 6 array(3, 'Fizz'), 7 array(5, 'Buzz'), 8 array(15, 'FizzBuzz') 9 ); 10 } Il nome della funzione per il provider non importa, ma prende di significato quando il test fallisce e verrà stampato il nome del data provider. Per utilizzare un data provider, dobbiamo aggiungere l annotazione alla docblock che precede il test in modo da dire a PHPUnit di utilizzarlo. 2 /** 3 * Test for our FizzBuzz object 4 * 5 * @dataprovider fizzbuzzprovider 6 */ 7 public function testfizzbuzz($input, $expected) 8 { 9 $response = $this->fb->check($input); 10 $this->assertequals($expected, $response); 11 } Adesso abbiamo solamente un test (meno codice da mantenere) e possiamo aggiungere scenari via data provider. Dobbiamo anche imparare a capire, mentre analizziamo quello che abbiamo da testare, quali test abbiamo realmente necessità di scrivere. Quando utilizziamo un data provider, PHPUnit eseguirà il test method ogni volta per ogni set di dati presenti nel provider. Se il test fallisce vi indicherà quale indice nell array associato è stato usato per eseguire quel test. Esempi più complessi Non pensate che potreste avere solo semplici data provider. Quello che vi serve fare è ritornare un array di array, dove per ogni risultato è presente un parametro che il tuo test method si aspetta. Qui un esempio più complesso:

Data Provider 5 2 public function complexprovider() 3 { 4 // Read in some data from a CSV file 5 $fp = fopen("./fixtures/data.csv"); 6 $response = array(); 7 8 while ($data = fgetcsv($fp, 1000, ",")) { 9 $response[] = array($data[0], $data[1], $data[2]); 10 } 11 12 fclose($fp); 13 14 return $response; 15 } Quindi non pensate che avete bisogno di limitare quello che i vostri data provider possono fare. L obiettivo è di creare un sufficiente set di dati da testare scrupolosamente. Data Provider Trick Siccome un data provider ritorna un array associativo, potete assegnargli chiavi descrittive aggiuntive per aiutarvi nel debugging. Per esempio, potete riscrivere il data provider per il nostro FizzBuzz test cosi: 2 return array( 3 'one' => array(1, '1'), 4 'fizz' => array(3, 'Fizz'), 5 'buzz' => array(5, 'Buzz'), 6 'fizzbuzz' => array(15, 'FizzBuzz') 7 ); Inoltre, un data provider non ha bisogno di essere un metodo della stessa classe. Potete usare metodi di altre classi, ricordandosi di definirle di tipo public. Potete utilizzare anche i namespace. Ecco un esempio: @dataprovider Foo::dataProvider @dataprovider Grumpy\Helpers\Foo::dataProvider Questo permette di creare classi di aiuto che sono soltato data provider e ridurre l ammontare di codice duplicato nel test stesso.