50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino.
La nuova versione di Java implementa caratteristiche che da tempo erano attese
nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e
Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle
Enumeration.
Per Java 6: gestione di SystemTray e motori di scripting.
Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino.
La nuova versione di Java implementa caratteristiche che da tempo erano attese
nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e
Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle
Enumeration.
Per Java 6: gestione di SystemTray e motori di scripting.
Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
Il documento si propone di analizzare le tecniche di base per effettuare il reverse engineering. Verranno inoltre prese in esame le caratteristiche principali di alcuni dei tool utilizzati nel reverse engineering .
Unit Test: Un tipo di test del software in cui vengono testate singole di un software. Lo scopo è convalidare che ogni unità del codice software funzioni come previsto. Lo Unit Testing viene eseguito durante lo sviluppo (fase di codifica) di un'applicazione da parte degli sviluppatori. Essi isolano una sezione di codice e ne verificano la correttezza.
Unità: può essere una singola funzione, metodo, procedura, modulo o oggetto. La definizione di unità è decisa team by team
Sviluppo guidato dai tests in ambiente WordPress. La prima parte della frase fa aggrottare la fronte in condizioni normali: in ambiente WordPress assume un che di mistico ed irraggiungibile. Non è così.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
In questa serie di slide vedremo come creare i build step su Visual Studio Team Services sfruttando gli add-on forniti da Red Gate, come DLM Automation 2: Build.
Il documento si propone di analizzare le tecniche di base per effettuare il reverse engineering. Verranno inoltre prese in esame le caratteristiche principali di alcuni dei tool utilizzati nel reverse engineering .
Unit Test: Un tipo di test del software in cui vengono testate singole di un software. Lo scopo è convalidare che ogni unità del codice software funzioni come previsto. Lo Unit Testing viene eseguito durante lo sviluppo (fase di codifica) di un'applicazione da parte degli sviluppatori. Essi isolano una sezione di codice e ne verificano la correttezza.
Unità: può essere una singola funzione, metodo, procedura, modulo o oggetto. La definizione di unità è decisa team by team
Sviluppo guidato dai tests in ambiente WordPress. La prima parte della frase fa aggrottare la fronte in condizioni normali: in ambiente WordPress assume un che di mistico ed irraggiungibile. Non è così.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
I test unitari sono sempre più utilizzati per verificare la correttezza del codice che scriviamo.
Ci si trova però a volte di fronte a codice scritto in maniera poco "disaccoppiata". Questo può impedirci di sostituire a runtime dei Dependent-on Object con dei Mock Object o degli Stub. Nel talk descriverò un plugin scritto per symfony (ma utilizzabile anche in altri ambiti) che permette di sostituire delle classi a runtime ridefinendole e configurandole all'interno dei test, creando un ambiente che isola il codice da verificare.
Il talk prevederà degli esempi pratici di utilizzo dello strumento descritto.
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
In questa serie di slide vedremo come creare i build step su Visual Studio Team Services sfruttando gli add-on forniti da Red Gate, come DLM Automation 2: Build.
In questo corso scopriremo cosa sono le SQL Injection, attacchi e rimedi. Vedremo anche sqlmap, uno strumento che ci permette di eseguire attacchi in modo automatizzato per aiutarci a individuare falle nelle nostre Web Application
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
Nicola e Davide vi guideranno in uno spericolato refactoring di un codice poco gradevole alla vista di qualsiasi buon programmatore con lo scopo di illustrare i principali problemi che normalmente affligono il nostro povero codice rendendo difficile la scrittura di fantastici e utili test unitari. Verranno spiegati i principi da rispettare per ottenere un codice facile da testare quali: dependency injection, law of demeter, uso del pattern factory e builder, corretta scrittura dei costruttori, come scovare nomi pericolosi. Ed illustrate le pratiche da evitare: pattern singleton, stati globali, service locator, scrittura di classi con troppa responsabilità. Alla fine del talk verranno presentati alcuni link, software e libri utili nella scrittura di test unitari.
PASS Virtual Chapter - SQL Server Continuous IntegrationAlessandro Alpi
Build automatizzate, esecuzione di unit test, creazione di un pacchetto nuget, ecco cosa serve per essere pronti con SQL Server e la continuous integration
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
Continuous Integration con SQL Server. Come automatizzare i processi di build e di test su database SQL Server. Come includere SQL Server nei processi di Application Lifecycle Management (Database Lifecycle Management).
La continuous integration, ovvero un insieme di pratiche di sviluppo atte a rilasciare frequentemente le modifiche al nostro codice, può essere applicata anche a SQL Server. In questa sessione andremo a descrivere come mettere sotto controllo del codice sorgente i nostri database in un'ottica di teamwork e, successivamente, a capire come automatizzare il processo di test unitario al fine di prevenire regressioni e correggere quanto prima bug.
Similar to Test double - un'introduzione (PHP) (20)
2. TDD, un breve riepilogo
Test Driven Development: metodologia di sviluppo
software che antepone la stesura di test allo sviluppo
reale delle funzionalità.
Come?
Scrivo test che
fallisce e lo
eseguo
Rifattorizzo il
codice
Scrivo codice che
soddisfi il test
3. TDD, un breve riepilogo
Perché scrivere prima il test?
Previene/fa regredire/mette in luce bug;
Assicura copertura del codice;
Permette di comprendere finalità e modalità della
funzione testata;
Permette refactoring, sperimentazioni e
cambiamenti nel codice preesistente
4. TDD, un breve riepilogo
Come deve essere un buon test?
Automatizzato;
Isolato;
Ripetibile;
Facile da scrivere, leggere => facile da mantenere
5. Fasi di un test
SUT: system under test (classe, oggetto o metodo testato)
6. Fasi di un test
VS metodo scientifico
Ipotesi
Tesi
Dimostrazione
7. Test classico 1/2
class OrderTest extends PHPUnit_Framework_TestCase {
const DISARONNO = ‘Amaretto di Saronno’;
const BACARDI = ‘Bacardi Superior’;
private $warehouse;
public function setUp()
{
$this->warehouse = new Warehouse();
$this->warehouse->add(self::DISARONNO, 50);
$this->warehouse->add(self::BACARDI, 25);
}
public function testFillingRemovesInventoryIfInStock()
{
$order = new Order(self::DISARONNO, 50); //fase setup II parte
$order->fill($this->warehouse); //fase exercise
$this->assertTrue($order->isFilled()); //fase verification
$this->assertCount(0, $this->warehouse->getInventory(self::DISARONNO));
}
8. Test classico 2/2
public function testFillingRemovesInventoryIfInStock()
{
$order = new Order(self::DISARONNO, 51);
$order->fill($this->warehouse);
$this->assertFalse($order->isFilled());
$this->assertCount(50, $this->warehouse->getInventory(self::DISARONNO));
}
}
10. Test Double, quando entrano in gioco?
Indirect output
Indirect input
DOC: depended on component
11. Test Double, quando entrano in gioco?
Indirect output
Indirect input
Il Test Double sostituisce il DOC in fase di test
12. Test Double, varianti
Dummy Object: un placeholder passato al SUT ma
mai utilizzato
Test Stub: sostituisce un DOC per avere un punto di
controllo sugli indirect input necessari al SUT
Test Spy: offre un punto di osservazione sugli
indirect input necessari al SUT
Mock Object: costituisce un punto di osservazione
sugli indirect output erogati dal SUT
Fake Object: sostituisce le funzionalità di un DOC
con una implementazione semplificata senza fornire
controllo sugli indirect input/output del SUT
13. Test Double – Mock 1/2
class OrderTest extends PHPUnit_Framework_TestCase
{
const DISARONNO = ‘Amaretto di Saronno’;
public function testFillingRemovesInventoryIfInStock()
{
//setup - dati
$order = new Order(self::DISARONNO, 50);
$warehouseMock = $this->getMock('Warehouse', array('hasInventory', 'remove'));
$warehouseMock->expects($this->at(0)) //setup - expectations
->method('hasInventory')
->with($this->equalTo(self::DISARONNO), $this->equalTo(50)) //indirect output
->will($this->returnValue(true)); //indirect input
$order->fill($warehouseMock); //exercise
14. Test Double – Mock 2/2
$this->assertTrue($order->isFilled()); //verify
}
public function testFillingDoesNotRemoveIfNotEnoughInStock() {
$order = new Order(self::DISARONNO, 51);
$warehouseMock = $this->getMock('Warehouse', array('hasInventory'));
$warehouseMock->expects($this->once())
->method("hasInventory”)
->will($this->returnValue(false));
$order->fill($warehouseMock);
$this->assertFalse($order->isFilled());
}
}
15. Test Double – Stub 1/2
interface MailService {
public function send (Message $msg);
}
class MailServiceStub implements MailService {
private $messages = array();
public function send (Message $msg)
{
$this->messages[] = $msg;
}
public function numberSent()
{
return count($this->messages);
}
}
16. Test Double – Stub 2/2
class OrderTest extends PHPUnit_Framework_TestCase
{
…
public function testOrderSendsMailIfUnfilled() {
$order = new Order(self::DISARONNO, 51);
...
$mailServiceStub = new MailServiceStub();
$order->setMailer($mailServiceStub);
$order->fill($warehouse);
$this->assertEquals(1, $mailer->numberSent());
}
}
17. Test Double – Stub vs Mock as Spy
class OrderTest extends PHPUnit_Framework_TestCase
{
…
public function testOrderSendsMailIfUnfilled() {
$order = new Order(self::DISARONNO, 51);
…
$mailServiceMock = $this->getMock('MailService', array('send'));
$order->setMailer($mailServiceMock);
$mailServiceMock->expects($this->once())
->method("send");
$order->fill($warehouse);
}
}
18. Credits & Contacts
PHPUnit – manuale - http://phpunit.de/manual/
xUnit Patterns – Test Double, Gerard Meszaros -
http://xunitpatterns.com/Test%20Double.html
Mocks arent Stubs, Martin Fowler -
http://martinfowler.com/articles/mocksArentStubs.html
Test Double, un’introduzione
di Carmelantonio Zolfo
carmelantonio.zolfo@gmail.com