Come dovrei testare la funzionalità di una funzione che utilizza altre funzioni al suo interno? [duplicare]

2

Supponiamo che esista una funzione get-data che restituisce una mappa di informazioni sull'ID dell'utente passato. Ora questa funzione utilizza 3 funzioni source-a , source-b e source-c per ottenere tre diversi tipi di mappe . Ora combiniamo tutte queste mappe in una mappa e ritorniamo da get-data .

Quando provo get-data , dovrei verificare l'esistenza dei dati per le chiavi? Ha senso che questa funzione fallisca i test unitari se uno di source-a , source-b e source-c falliscono? Se questa funzione è combinare i dati, e lo sta facendo, dovrebbe essere sufficiente, giusto?

    
posta Amogh Talpallikar 24.01.2014 - 13:48
fonte

2 risposte

10

Suppose there is a function get-data which returns a map of information about the id of the user passed in.

Grande. Dovresti testarlo allora. Per un dato ID, ottieni i dati giusti?

now this function uses 3 functions source-a, source-b and source-c to get three different kinds of maps.

Quale è un dettaglio di implementazione che dovresti ignorare nel test. Tutto quello che stai testando è che la tua unità di lavoro (questo metodo) fa quello che dovrebbe (prendi un ID e restituisci i dati XYZ per quell'ID). In che modo il metodo non è particolarmente rilevante - dopo tutto, un vantaggio chiave di questo test unitario è che puoi rifattorizzare l'implementazione del metodo e il test verificherà che l'hai fatto correttamente.

Detto questo, probabilmente avrai bisogno di prendere in giro le origini dati, quindi a un certo punto il test probabilmente avrà bisogno di sapere come funziona il codice per farlo. Dovrai bilanciare tre obiettivi concorrenti qui: rendere il test isolato (prendendo in giro i dati), rendendo il test incentrato sui requisiti e sul pragmatismo.

Alla fine, è il codice che conta. Esistono test per supportare il codice reale, impiegando molto tempo e problemi con i test di lucidatura non è tanto utile quanto i test .

    
risposta data 24.01.2014 - 15:01
fonte
0

Nei test unitari, devi solo testare la funzionalità di una classe, se i tuoi metodi source-a, source-b e source-c chiamano altre classi, dovresti prenderli in giro (dovrebbero essere testati nelle loro classi).

Nei test di integrazione, si verifica il comportamento di diverse classi che interagiscono tra loro, il che significa che la funzione get-data deve verificare che i dati che stanno recuperando siano corretti (source-a, source-b e source-c sono corretti e i dati si stanno unendo correttamente)

I test delle unità sono più facili e più mirati e dovrebbero essere creati dagli sviluppatori. I test di integrazione di solito diventano obsoleti relativamente veloci (se qualche componente interno è stato modificato), quindi sono più difficili da mantenere. Dovrebbe essere creato da un profilo QA.

    
risposta data 24.01.2014 - 14:48
fonte

Leggi altre domande sui tag