Create your own awesome maps

Even on the go

with our free apps for iPhone, iPad and Android

Get Started

Already have an account?
Log In

Mock Objects by Mind Map: Mock Objects
0.0 stars - 0 reviews range from 0 to 5

Mock Objects

introduzione ai mock

cosa sono

sono uno strumento di supporto al testing, e quindi al TDD, in alcuni casi sono uno strumento di design vero e proprio, interaction-based testing, jMock

sono delle 'controfigure' di oggetti applicativi, da qui il termine Test Double che ora si sta diffondendo per indicare la famiglia di mock, fake, stub, dummy, ..., esternamente sono indistinguibili dall'oggetto reale, offrono le stesse API, ma in realta' offrono servizi che consentono di testare meglio gli oggetti che da loro dipendono

a cosa servono

aiutano a rendere i test piu', isolati e indipendenti, i test non dipendono dal comportamento dei collaboratori (oggetti secondari), che possono essere risorse esterne e pertanto di difficile gestione e accesso, atomici, i test testano esclusivamente la logica della classe sotto test (oggetto primario), non testano anche il corretto comportamento di altri oggetti secondari, facili da preparare, la setUp non deve istanziare i veri collaboratori ma una loro 'controfigura', veloci nell'esecuzione, aperti nel design, per usare i mock si deve per forza 'aprire il design' del proprio codice, esplicitare e dichiarare le dipendenze, Inversion Of Control, Dip, perche' altrimenti non si e' in grado di iniettare di volta in volta i mock o gli oggetti applicativi

Chiarire i termini del discorso

col termine mock objects molte persone indicano tecniche simili ma diverse tra loro

in realta' il termine, strettamente parlando, indica un modo di usare questi oggetti per fare design e per approcciare il TDD, Questo modo e' stato definito interaction-based testing (articolo di M.Fowler 'Mocks aren't stubs')

Test Double

Fake, actually has working implementation, but usually take some shortcut which makes it not suitable for production, an InMemoryDatabase is a good example

Stub, Provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test, Stubs may also record information about calls, such as an email gateway stub that remembers the messages it 'sent', or maybe only how many messages it 'sent'

Mock, sono dei Fake con in piu' la capacita' di programmare e testare quali metodi del mock sono chiamati durante il test, is pre-programmed with expectations which form a specification of the calls it's expected to receive, can throw an exception if it receive a call it doesn't expect and is checked during verification to ensure it got all the calls it were expecting

Dummy, Is passed around but never actually used, Usually it's just used to fill parameter lists

Problema

Vogliamo avere test isolati ed indipendenti, ovvero test che verificano esclusivamente la logica di quella singola unita' (tipicamente una classe), "An essential aspect of unit testing is to test one feature at time; you need to know exactly what you are testing and where any problems are" (Endo-Testing: Unit Testing with Mock Objects), vogliamo certamente verificare la corretta interazione con gli oggetti con i quali il nostro oggetto sotto test collabora per realizzare i suoi servizi, ma non vogliamo per questo dipendere dal comportamento dei suoi collaboratori, ovvero non vogliamo testare anche loro nello unit test del mio OST

Vogliamo avere test che non si rompono se quella tale risorsa esterna non e' disponibile (es: il db e' giu')

Vogliamo test che siano il piu' veloce possibili, per poterli eseguire piu' spesso possibile

tools

per Java

jMock, http://www.jmock.org/

EasyMock, http://www.easymock.org/

rMock, http://rmock.sourceforge.net/

jMockIt, https://jmockit.dev.java.net/, serve Jdk 1.5

Elenco tools per altri linguaggi su www.mockobjects.com

link utili

http://www.mockobjects.com/

"Endo-Testing: Unit Testing with Mock Objects" - XP 2000

"Mock Roles, not Objects" - OOPLSA 2004

http://xunitpatterns.com

in particolare la sezione dedicata ai test doubles

http://del.icio.us/pierodibello/MockObjects

http://martinfowler.com/articles/mocksArentStubs.html