Mock object

Nella programmazione orientata agli oggetti, i mock object (oggetti simulati od oggetti mock) sono degli oggetti simulati che riproducono il comportamento degli oggetti reali in modo controllato. Un programmatore crea un oggetto mock per testare il comportamento di altri oggetti, reali, ma…

Nella programmazione orientata agli oggetti, i mock object (oggetti simulati od oggetti mock) sono degli oggetti simulati che riproducono il comportamento degli oggetti reali in modo controllato. Un programmatore crea un oggetto mock per testare il comportamento di altri oggetti, reali, ma legati ad un oggetto inaccessibile o non implementato. Allora quest'ultimo verrà sostituito da un mock.

Questo concetto è stato utilizzato per la prima volta durante la conferenza XP 2000, in un articolo di Tim Mackinnon, Steve Freeman e Philip Craig intitolato Endo-Testing: Unit Testing with Mock Objects.

Utilizzo

Nei test di unità, i mocks possono simulare il comportamento degli oggetti reali e complessi e sono utili quando gli oggetti correlati sono impossibili da utilizzare. Si possono citare i seguenti casi:

Rimpiazzare un comportamento non deterministico (l'ora o la temperatura ambiente).

Se l'oggetto ha degli stati difficili da riprodurre(un errore di sistema ad esempio).

Se l'inizializzazione dell'oggetto è lunga (es. : creazione di un database).

Se l'oggetto non esiste o se il suo comportamento può ancora cambiare.

Se è necessario d'includere degli attributi e dei metodi unicamente a fini di test.

Per esempio, un programma d'allarme che produrrà una suoneria ad una determinata ora. Per testarlo, il programma dovrebbe aspettare l'ora prevista al fine di verificare che la suoneria s'inneschi. Utilizzando un mock, questo potrà essere de-regolato per simulare l'ora di innesco della suoneria.

Dettagli tecnici

Un mock ha la stessa interfaccia dell'oggetto che simula, autorizzando così l'oggetto client a ignorare se interagisce con un oggetto reale o simulato.

Quasi tutti i frameworks che utilizzano i mock permettono al programmatore di specificare quali metodi saranno chiamati e in quale ordine saranno eseguiti. Anche i parametri che verranno passati. I valori ritornati dal mock saranno anche questi definiti dal programmatore. Così, il comportamento di un oggetto complesso come un socket potrà essere simulata dal mock, permettendo al programmatore di studiare il comportamento del suo oggetto in una larga varietà di stati ai quali potrà essere confrontato.

Mock, fakes e stubs

Alcuni autori fanno distinzione tra i mock e gli oggetti fittizi (fake).Gli oggetti fittizi sono i più semplici tra i due, implementano la stessa interfaccia dell'oggetto che rappresentano e inviano delle risposte predefinite. Anche un oggetto fake fornisce un insieme di metodi stub.

Nel libro The Art of Unit Testing , i mock sono descritti come degli oggetti fittizi che permettono di decidere se un test è stato passato, verificando se l'interazione con un oggetto si produce o meno. Tutti gli altri oggetti sono stubs. Gli oggetti fittizi corrispondono a tutto ciò che non è reale. Utilizzando questa terminologia, sono sia stubs che mocks.

In questo senso, i mocks hanno qualcosa in più: l'implementazione dei lori metodi contiene delle affermazioni. Questo vuol dire che un vero mock esaminerà il contesto delle chiamate dei metodi che saranno fatti, per esempio effettuando dei test sui dati passati come argomenti della chiamata.

Servizi correlati

Altre voci

F

Front office

Nell'organizzazione aziendale, il termine inglese front office (letteralmente "ufficio frontale") indica l'insieme delle strutture di un'organizzazione che gestiscono l'interazione con il cliente. Si contrappone al back office che rappresenta invece il motore aziendale, ossia ciò che accade…

Leggi la voce →
Ansible (software)A

Ansible (software)

In informatica Ansible è un software libero che consente di automatizzare le procedure di configurazione e gestione sui sistemi unix-like e Windows (Il nome "Ansible" si riferisce ad un oggetto fantascientifico che consente di comunicare più velocemente della luce).

Leggi la voce →
C

Code smell

Nell'ingegneria del software, e in particolare nel contesto dello sviluppo agile e dell'extreme programming, l'espressione code smell (letteralmente "puzza del codice") viene usata per indicare una serie di caratteristiche che il codice sorgente può avere e che sono generalmente riconosciute…

Leggi la voce →
T

Test di Turing

Il test di Turing è un criterio per determinare se una macchina è in grado di esibire un comportamento intelligente, suggerito da Alan Turing nell'articolo Computing machinery and intelligence apparso nel 1950 sulla rivista Mind.

Leggi la voce →
D

Documentazione del software

La documentazione software, in informatica ed in particolare nell'ambito dello sviluppo software, è un testo scritto che accompagna un software, con lo scopo di spiegare quali funzionalità assolve il software, come è strutturato e implementato e come lo si utilizza.

Leggi la voce →
S

Software development kit

Un software development kit (SDK, traducibile in italiano come "pacchetto di sviluppo per applicazioni"), in informatica, indica genericamente un insieme di strumenti per lo sviluppo e la documentazione di software.

Leggi la voce →