Test double: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 1: Riga 1:
{{O|informatica|novembre 2016}}
{{O|informatica|novembre 2016}}
I '''test double''' (informalmente indicati anche con la denominazione impropria<ref name="mocker"/> di '''mock''') sono uno strumento utilizzato in [[Programmazione (informatica)|programmazione]], specialmente [[programmazione orientata agli oggetti|orientata agli oggetti]], come ausilio nello sviluppo di [[unit testing|test unitari]]. Un test double è un oggetto che presenta la stessa interfaccia di un oggetto appartenente all'applicazione, ma ha un comportamento semplificato (o addirittura "vuoto"). Dato che l'interfaccia è la stessa, l'oggetto applicativo può essere "rimpiazzato" dal suo test double in quei test in cui il comportamento dell'oggetto reale non è rilevante o addirittura non è riproducibile. L'espressione "test double" è un calco da "stunt double", [[controfigura]].<ref name="mocker">[https://8thlight.com/blog/uncle-bob/2014/05/14/TheLittleMocker.html Robert Martin, ''The Little Mocker'']</ref>
I '''test double''' (informalmente indicati anche con la denominazione impropria<ref name="mocker"/> di '''mock''') sono uno strumento utilizzato in [[Programmazione (informatica)|programmazione]], specialmente [[programmazione orientata agli oggetti|orientata agli oggetti]], come ausilio nello sviluppo di [[unit testing|test unitari]]. Un test double è un oggetto che presenta la stessa interfaccia di un oggetto appartenente all'applicazione, ma ha un comportamento semplificato (o addirittura "vuoto"). Dato che l'interfaccia è la stessa, l'oggetto applicativo può essere "rimpiazzato" dal suo test double in quei test in cui il comportamento dell'oggetto reale non è rilevante o addirittura non è riproducibile. Le modalità con cui il test double viene sostituito all'oggetto reale sono in generale riconducibili alle tecniche di [[dependency injection]]. L'espressione "test double" è un calco da "stunt double", [[controfigura]].<ref name="mocker">[https://8thlight.com/blog/uncle-bob/2014/05/14/TheLittleMocker.html Robert Martin, ''The Little Mocker'']</ref>


== Tipi di test double ==
==Tipi di test double==
Il concetto di test double è molto ampio e può applicarsi a oggetti "controfigura" con caratteristiche strutturali e funzionalità molto diverse fra loro. La classificazione dei tipi di test double, e la corrispondente terminologia, è stata storicamente incerta, ma si è andata gradualmente standardizzando. Fra gli altri, hanno proposto la classificazione "standard" Gerard Meszaros (nel libro ''XUnit Test Patterns'' del 2007)<ref>{{cita libro|cognome=Meszaros |nome=Gerard |titolo=xUnit Test Patterns: Refactoring Test Code |anno=2007 |editore=Addison-Wesley |isbn=978-0-13-149505-0}}</ref>, [[Martin Fowler]] (''Mocks Aren't Stubs''<ref>{{cita web|url=http://martinfowler.com/articles/mocksArentStubs.html |titolo=''Mocks Aren't Stubs'' |cognome=Fowler |nome=Martin |anno=2007 |accesso=23 maggio 2015 }}</ref>) e [[Robert Martin]]<ref name="mocker"/> La classificazione proposta da questi autori è stata adottata, tra l'altro, da [[Microsoft]].<ref>{{cita web|titolo=''Exploring The Continuum Of Test Doubles'' |url=http://msdn.microsoft.com/en-us/magazine/cc163358.aspx |cognome=Seemann |nome=Mark |anno=2007 |accesso=23 maggio 2015 }}</ref>
Gerard Meszaros<ref>{{cita libro|cognome=Meszaros |nome=Gerard |titolo=xUnit Test Patterns: Refactoring Test Code |anno=2007 |editore=Addison-Wesley |isbn=978-0-13-149505-0}}</ref> ha identificato diversi differenti termini per ciò che lui chiama "test double". Usando il suo vocabolario, ci sono almeno 5 tipi di test double:
* ''Test stub'' (usato per fornire il codice testato con "input indiretto")
* ''Oggetto mock'' (usato per verificare l'"output indiretto" del codice testato, in primo luogo definendo le aspettative e prima che il codice testato sia eseguito)
* ''Test spy'' (usato per verificare l'"output indiretto" del codice testato, sostenendo in seguito le aspettative, senza aver definito le aspettative prima che il codice testato sia eseguito)
* ''Oggetto fake'' (usato come una implementazione più semplice, per esempio usando un database in memoria nei test invece di fare accesso ad un database reale)
* ''Oggetto dummy'' (usato quando un parametro è necessario per il metodo testato ma senza aver bisogno di usare realmente il parametro)


I principali tipi di test double secondo la classificazione comune sono i seguenti:
Anche se non esiste uno [[standard aperto]] per il test double e le varie tipologie, c'è lo slancio per l'uso continuato di questi termini in questo modo. [[Martin Fowler]] ha usato questi termini nel suo articolo, ''Mocks Aren't Stubs''<ref>{{cita web|url=http://martinfowler.com/articles/mocksArentStubs.html |titolo=''Mocks Aren't Stubs'' |cognome=Fowler |nome=Martin |anno=2007 |accesso=23 maggio 2015 }}</ref> facendo riferimento al libro di Meszaros. Inoltre, [[Microsoft]] ha usato gli stessi termini e definizioni in un articolo intitolato ''Exploring The Continuum of Test Doubles''.<ref>{{cita web|titolo=''Exploring The Continuum Of Test Doubles'' |url=http://msdn.microsoft.com/en-us/magazine/cc163358.aspx |cognome=Seemann |nome=Mark |anno=2007 |accesso=23 maggio 2015 }}</ref>

* '''Dummy'''. Un test double privo di comportamento. L'applicazione tipica di un dummy è al caso in cui sia necessario passare un oggetto come parametro a un metodo, ma si prevede che tale oggetto non sarà usato nel particolare flusso di esecuzione previsto dal test.
* '''Stub'''. Un test double che fornisce un comportamento fissato (per esempio, dotato di metodi che tornano sempre lo stesso valore, senza eseguire alcuna computazione). Viene usato per controllare l'"input indiretto" del codice sotto test.
* '''Spy'''. Un test double che memorizza i messaggi che riceve dal codice sotto test, in modo che sia possibile in seguito eseguire verificare che siano soddisfatte determinate aspettative.
* ''Mock''. Una variante dello "spy" in cui il test double è responsabile anche di verificare che siano state soddisfatte le aspettative sul comportamento del codice sotto test.
* ''Fake''. Oggetto con un comportamento programmabile, che simula quello dell'oggetto reale (per esempio un oggetto che implementa un database in memoria invece di accedere a un database reale).


== Note ==
== Note ==

Versione delle 16:14, 20 apr 2017

I test double (informalmente indicati anche con la denominazione impropria[1] di mock) sono uno strumento utilizzato in programmazione, specialmente orientata agli oggetti, come ausilio nello sviluppo di test unitari. Un test double è un oggetto che presenta la stessa interfaccia di un oggetto appartenente all'applicazione, ma ha un comportamento semplificato (o addirittura "vuoto"). Dato che l'interfaccia è la stessa, l'oggetto applicativo può essere "rimpiazzato" dal suo test double in quei test in cui il comportamento dell'oggetto reale non è rilevante o addirittura non è riproducibile. Le modalità con cui il test double viene sostituito all'oggetto reale sono in generale riconducibili alle tecniche di dependency injection. L'espressione "test double" è un calco da "stunt double", controfigura.[1]

Tipi di test double

Il concetto di test double è molto ampio e può applicarsi a oggetti "controfigura" con caratteristiche strutturali e funzionalità molto diverse fra loro. La classificazione dei tipi di test double, e la corrispondente terminologia, è stata storicamente incerta, ma si è andata gradualmente standardizzando. Fra gli altri, hanno proposto la classificazione "standard" Gerard Meszaros (nel libro XUnit Test Patterns del 2007)[2], Martin Fowler (Mocks Aren't Stubs[3]) e Robert Martin[1] La classificazione proposta da questi autori è stata adottata, tra l'altro, da Microsoft.[4]

I principali tipi di test double secondo la classificazione comune sono i seguenti:

  • Dummy. Un test double privo di comportamento. L'applicazione tipica di un dummy è al caso in cui sia necessario passare un oggetto come parametro a un metodo, ma si prevede che tale oggetto non sarà usato nel particolare flusso di esecuzione previsto dal test.
  • Stub. Un test double che fornisce un comportamento fissato (per esempio, dotato di metodi che tornano sempre lo stesso valore, senza eseguire alcuna computazione). Viene usato per controllare l'"input indiretto" del codice sotto test.
  • Spy. Un test double che memorizza i messaggi che riceve dal codice sotto test, in modo che sia possibile in seguito eseguire verificare che siano soddisfatte determinate aspettative.
  • Mock. Una variante dello "spy" in cui il test double è responsabile anche di verificare che siano state soddisfatte le aspettative sul comportamento del codice sotto test.
  • Fake. Oggetto con un comportamento programmabile, che simula quello dell'oggetto reale (per esempio un oggetto che implementa un database in memoria invece di accedere a un database reale).

Note

  1. ^ a b c Robert Martin, The Little Mocker
  2. ^ Gerard Meszaros, xUnit Test Patterns: Refactoring Test Code, Addison-Wesley, 2007, ISBN 978-0-13-149505-0.
  3. ^ Martin Fowler, Mocks Aren't Stubs, su martinfowler.com, 2007. URL consultato il 23 maggio 2015.
  4. ^ Mark Seemann, Exploring The Continuum Of Test Doubles, su msdn.microsoft.com, 2007. URL consultato il 23 maggio 2015.

Voci correlate