Test double: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
Aggiungi 1 libro per la Wikipedia:Verificabilità (20231210)) #IABot (v2.0.9.5) (GreenC bot
 
(6 versioni intermedie di 3 utenti non mostrate)
Riga 3: Riga 3:


==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 Cecil Martin|Robert "Uncle Bob" 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>
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 |url=https://archive.org/details/xunittestpattern0000mesz |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 Cecil Martin|Robert "Uncle Bob" 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=https://msdn.microsoft.com/en-us/magazine/cc163358.aspx |cognome=Seemann |nome=Mark |anno=2007 |accesso=23 maggio 2015 }}</ref>


I principali tipi di test double secondo la classificazione comune sono i seguenti:
I principali tipi di test double secondo la classificazione comune sono i seguenti:
Riga 9: Riga 9:
* '''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.
* '''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.
* '''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.
* '''Spy'''. Un test double che memorizza i messaggi (chiamate di metodo) che riceve dal codice sotto test, in modo che sia possibile in seguito 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.
* '''Mock'''. Una variante dello "spy" in cui il test double è responsabile anche di memorizzare esplicitamente le aspettative sul comportamento del codice sotto test, e di verificare che siano soddisfatte.
* '''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).
* '''Fake'''. Test double 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 attuale delle 19:51, 13 dic 2023

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

[modifica | modifica wikitesto]

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 "Uncle Bob" 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 (chiamate di metodo) che riceve dal codice sotto test, in modo che sia possibile in seguito verificare che siano soddisfatte determinate aspettative.
  • Mock. Una variante dello "spy" in cui il test double è responsabile anche di memorizzare esplicitamente le aspettative sul comportamento del codice sotto test, e di verificare che siano soddisfatte.
  • Fake. Test double 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).
  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

[modifica | modifica wikitesto]