22
Materiale https://github.com/javasilk/api-mani-in-pasta https://github.com/cernio/behapi https://getcomposer.org/doc/00-intro.md

Sviluppare software a colpi di test – II appuntamento: “mani in pasta col BDD

Embed Size (px)

Citation preview

Sviluppare software a colpi di test

Mani in pasta

Andrea Salidu - Giugno 2015https://it.linkedin.com/in/andreasalidu

Un po di premesseChi sono

Andrea SaliduSoftware Architect presso Tiscali MediaSocio Fondatore FabbricastorieSocio Fondatore YourepContatti: [email protected] tel 340 26 72 232https://www.facebook.com/andrea.salidu.71https://www.linkedin.com/in/andreasalidu

Vi ricordate da dove siamo partiti?

BDD - Riassunto

Behavior Driven Development- Make it right- Test “inclusi”- Rilasci frequenti- Software snello- Linguaggio specifico di

dominio

Parole chiave- .feature- Scenario- Background- Given, And, When,

Then, But...

setup ambienteuno sguardo di dettaglio a behapiin pasta I : definizione user storyin pasta II: dettaglio scenariin pasta III: behapi da vicinoin pasta IV: sviluppiamo!

Cosa facciamo oggi

Feature: Caricare un documentoCome utente contributore,

Voglio caricare un documento Così che sia disponibile sulla digital library

Nota: Accetta pdf, ppt, odt, odf, sxw, txt

I.N.V.E.S.T.https://en.wikipedia.org/wiki/INVEST_%28mnemonic%29

In pasta I - user story

Esigenza: consentire a un utente di autenticarsi sul nostro sistemaDeriva da: - “per salvare i miei documenti devo essere identificato”- “per commentare devo essere riconoscibile”- “vogliamo tracciare il profilo utente”- “dobbiamo per legge riconoscere l’utente che condivide i post per non caricarci di responsabilità che non ci competono”

In pasta I - user story...

Login- Come utente della piattaforma, per poter salvare i documenti, devo

autenticarmi- Per potermi autenticare, come utente della piattaforma, devo potermi

registrare- Come utente registrato, per poter accedere in maniera riconoscibile,

devo essere dotato di una coppia di credenziali (username/password)- (opzionale) Come utente facebook, devo poter utilizzare la mia identità

su facebook per registrarmi e autenticarmi

In pasta I - ...user story

Scenario: Dato che ho un utente “pippo” E un utente “pluto”

Quando “pluto” segue “pippo”

Allora “pippo” riceve una notifica via email contenente “pluto ha iniziato a seguirti”

Pensate alla costruzione di una query: Prepare… Bind… => ARRANGEExecute => ACT

In pasta II - scenari...

ARRANGE

ACT

ASSERT

Funzionalità: login Come utente della piattaforma Voglio autenticarmi Così che io possa salvare i documenti, essere riconoscibile...

Contesto: Dato che esiste l’utente “test” con password “letmein”

Scenario: Login successful Quando faccio POST su “/v1/login” con body “url-encoded”

“””

user=test&password=letmein

“””

Allora lo status code è “200”E il body è JSONE la risposta contiene

Allora “pluto_direct” riceve una mail di notifica diretta Ma “pluto_direct” non riceve una mail di notifica digest

In pasta II - ...scenari

class ApiContext{public function datoCheHoUnoUserPass($user,$pass){

…}

public function quandoFaccioPostConBody($url,$body){…

}

public function alloraStatusCode($val){ … }}

In pasta III - behapi da vicino

try { $tester=new ApiContext(); $tester->datoCheHoUnoUserPass(‘test’, ‘letmein’); $tester->quandoFaccioPostConBody(‘/v1/login’,

‘user=test&password=letmein’); $tester->alloraStatusCode(200);} catch (\Exception $e) {

print ‘[‘ . $e->getline(). ‘]’ . $e->getMessage();}

In pasta III - behapi da vicino...

“Ottimo lavoro ragazzi ma...

Prossimo appuntamento? - documentare con

swagger+nelmioapidocbundle

...non è ancora il momento di farsi i complimenti a vicenda

“Grazie!

http://guzzle.readthedocs.org/en/5.3/https://github.com/Peekmo/JsonPathhttps://robots.thoughtbot.com/writing-better-cucumber-scenarios-or-why-were

RIVEDEREhttp://2015.phpday.it/talk/behatminkphantomjs-test-all-the-things/http://www.slideshare.net/chassa/2013-0603specification-byexamplewithgherkinchristianhassahttp://www.slideshare.net/IosifItkin/behavior-driven-development-pros-and-conshttp://martinfowler.com/bliki/BusinessReadableDSL.html http://www.slideshare.net/railsconf/below-and-beneath-tdd-test-last-development-and-other-real-world-test-patterns-presentationhttps://robots.thoughtbot.com/writing-better-cucumber-scenarios-or-why-were

Libri:Gojko Adzic - Specification by example http://specificationbyexample.com/Mike Cohn - User stories applied http://www.mountaingoatsoftware.com/books/user-stories-applied

Riferimenti