[Test] State-based VS Interaction-based



State based
Si pone un obiettivo ad un soggetto.
Al termine dell'esperimento si analizza in che modo il soggetto ha portato a compimento il suo compito.
La modalità di esecuzione è ininfluente.
Verranno forniti al soggetto tutti i mezzi richiesti.

Esempio: dire ad un bambino di dipingere una casa su un foglio. Purchè il soggetto porti a termine il suo compito, non è importante sapere se ha usato un pennarello o una matita.

Interaction based
Oltre allo studio dell'obiettivo si analizzano anche i mezzi richiesti dal soggetto e le modalità di interazione ed uso.
La differenza sostanziale è che i mezzi forniti sono "simbolici".

Esempio: è importante sapere se il soggetto chiederà una matita o un pennarello. Egli ci istruirà a voce su ogni tipo di operazione compita, come: "traccio una linea verticale che congiunge i due punti" etc...

Considerazioni informatiche
  • Con un modello interaction-based non c' è quindi bisogno di manutenere delle classi fake col rischio di introdurre in esse della logica non banale. Le interrelazioni devono però essere programmate di volta in volta
  • Il modello interaction-based è vincolato ai dettagli implementativi e permette di chiarire le interfacce dei client dell'oggetto sotto esame
  • Il modello state-based risolve le aspettative, disinteressandosi della modalità di esecuzione
  • Il modello interaction-based porta facilmente alla definizione di comportamenti Talk, don't ask
Leggendo e commentando Mocks Aren't Stubs di Martin Fowler
Easy Mock e JMock (nota: JMock usa il nome dei metodi passati come stringa; ciò significa che il rename dei metodi porta inevitabilmente al fallimento dei test jmock)

Nessun commento: