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:
Se solen utilitzar amb objectes que tenen alguna de les següents característiques:
Els objectes simulats imiten la interfície de l'objecte.
Recursos:
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 o Mocking object frameworks
PHP:
Java:
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)
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