Github:Â https://github.com/matiux
Slack GRUSP:Â matiux
Email:Â m.galacci@gmail.com
Linkedin: Matteo Galacci
https://github.com/matiux/ddd-utente-esempio-v2
Vi racconto la mi esperienza diretta, per le best practices ci sono i libri.
Estremizzo il pragmatismo del testing, strizzando comunque l'occhio alla pulizia e al design.
Testa come ti pare, ma testa!
Ma se vuoi essere essere figo quando vai alle conferenze...
In un approccio pratico, anche uno solo di questi test potrebbe migliorare notevolmente la manutenibilità del software.
Unit tests are low-level, focusing on a small part of the software system.
Integration tests determine if independently developed units of software work correctly when they are connected to each other.
Testing your deployed application via its user interface is the most end-to-end way you could test your application. End-to-end tests give you the biggest confidence when you need to decide if your software is working or not.
Test-Driven Development (TDD) is a technique for building software that guides software development by writing tests. It was developed by Kent Beck in the late 1990's as part of Extreme Programming.
Â
In essence you follow three simple steps repeatedly:
Â
Testa come ti pare, ma testa!
Scrivili quando ti pare, ma scrivili!
Testa come ti pare, ma testa!
Scrivili quando ti pare, ma scrivili!
Scrivili dove ti pare, ma da qualche parte mettili!
Test Data Builders are just normal Builders with default values used exclusively in your test suites so that you don’t have to specify irrelevant parameters on specific test cases.
Â
Nella programmazione ad oggetti, il Builder è uno dei pattern fondamentali, definiti originariamente dalla Gang of Four. Il design pattern Builder, nella programmazione ad oggetti, separa la costruzione di un oggetto complesso dalla sua rappresentazione cosicché il processo di costruzione stesso possa creare diverse rappresentazioni.
Â
I builder ci aiutano a velocizzare la scrittura di test in quanto grazie a loro, non dobbiamo più preoccuparci dei dati sui quali far girare i test.
PHPUnit ci da modo di "etichettare" ogni singolo test, categorizzandolo. In questo modo possiamo decidere di lanciare solo test unitari, piuttosto che i testo del modulo "utente"
phpunit --group unit, controllers
phpunit --exclue e2e
I test dovrebbero lavorare su database solo su test end-to-end o al limite sui test di integrazione. Per tutto il resto, c'è la memoria. L'utilizzo di implementazioni in-memory dei repository potrebbe essere un buono spunto
I test devono essere atomici; ogni singola funzione di test deve avere i suoi dati e fare tutto senza dipendere da dati manipolati da altre funzioni. L'opzione process isolation di PHPUnit può essere utile.
Per mantenere l'atomicità , nei testi che utilizzano un database, a ogni test il db andrebbe svuotato. ORM Purger di doctrine potrebbe essere utile. In alternativa rendere i test transazionali. Vedere dama/doctrine-test-bundleÂ
I mock object sono degli oggetti simulati che riproducono (simulano) il comportamento degli oggetti reali in modo controllato. Un programmatore crea un oggetto mock per testare il comportamento di altri oggetti, reali, ma legati ad un oggetto inaccessibile o non implementato. Allora quest'ultimo verrà sostituito da un mock.​
Mockery è un framework per la gestione di oggetti mock molto flessibile per l'uso in unit test con PHPUnit, PHPSpec o qualsiasi altro framework di test.