IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Mock objects

En tests unitaris, mock objects aka objectes simulats o stubs o pseudo-objectes simulen el comportament d'objectes reals. S'utilitzen durant la realització de tests per aconseguir test isolation, per crear/simular objectes que encara no existeixen o per a tenir en compte el disseny de l'API d'una classe sense la necessitat d'implementar-la.


En la programació orientada a objectes els objectes simulats imiten el comportament dels objectes reals d'una forma controlada. S'utilitzen d'una forma similar als crash test dummies quan se simula un accident.

En els testos unitaris s'utilitzen quan és quasi impossible o molt complex utilitzar l'objecte real a la prova.

Problemes que es poden resoldre:

  • Per provar un objecte que depèn d'un altre podem utilitzar un objecte simulat per a l'objecte del que depen l'objecte que estem provant i no dependre del test de l'objecte del que depenem. Això és anomenat test isolation

Se solen utilitzar amb objectes que tenen alguna de les següents característiques:

  • Retornen resultats no deterministes com per exemple la hora o la temperatura.
  • El seu estat és difícil de crear o reproduir. Per exemple un error de connexió com se simula?
  • És lent, com per exemple el resultat d'un càlcul intensiu o una cerca a la base de dades o al sistema de fitxers.
  • El objecte encara no existeix i el seu comportament pot canviar.

Els objectes simulats imiten la interfície de l'objecte.

Recursos:

Com funcionen?

Els objectes simulats tenen la mateixa interfície pública (API) que els objectes reals permetent que l'objecte client (l'objecte que utilitza l'objecte simulat) cregui que es tracta d'un objecte real i de fet no té cap forma de saber si està utilitzant un objecte simulat o un objecte real.

La majoria dels frameworks per a simular objectes (vegeu Mocking object frameworks ) permeten al programador indicar quins mètodes i en quin ordre seran invocats en l'objecte simulat i podem controlar quins paràmetres se'ls i passaran in quins valors retornaran. D'aquesta forma el comportament d'un objecte complex com per exemple un Socket de xarxa pot ser simulat.

Mock object frameworks

Mock object frameworks o Mocking object frameworks

PHP:

Java:


Exemples

Programa d'alarma

Suposeu un programa que disparà una alarma en el moment exacte de temps que ha establert un usuari. Un possible disseny seria tenir dos objectes:

Alarm
Clock

On clock dona el temps real i la alarma és disparà si el temps actual correspon al temps amb que està configurada la alarma. Sense simular l'objecte Clock no podem testejar aquesta aplicació ja que hauriem d'esperar a que els temps fos el que volem testejar. En aquest cas és molt útil poder simular l'objecte Clock i configurar el seu estat per tal que el temps sigui el que ens interessa testejar amb independència de si correspon o no amb el temps real (test isolation)

Laracasts

https://laracasts.com/series/testing-jargon/episodes/2 
https://laracasts.com/series/testing-jargon/episodes/3
https://laracasts.com/series/testing-jargon/episodes/4 
https://laracasts.com/lessons/mock-that-thang

Vegeu també

Enllaços externs