quando prendersi gioco del test unitario [duplicato]

1

Sto provando a scrivere test unitari in javascript per un'applicazione fatta in nodejs. Quello che voglio sapere è -

Diciamo che c'è una classe Veicoli che dipende da un'altra classe Roads.

  1. Devo prendere in giro la classe Roads e inviarla come parametro ai veicoli per il test delle unità? O dovrei semplicemente creare un nuovo oggetto e inviarlo come parametro a Veicoli?

  2. Se cambio la classe Roads dovrò cambiare il mocking ogni dove?

  3. Devo usare una fabbrica per creare oggetti mocked?

posta Tushar Mathur 19.05.2013 - 12:27
fonte

2 risposte

3

Dovresti prendere in giro la classe Roads se

  • È costoso o difficile da creare, o
  • Le sue operazioni sono costose, o
  • Hai bisogno di un controllo preciso su cosa restituiscono le operazioni e quando generano un errore.

Con costi elevati, intendo che in genere consuma molto tempo (ad esempio, comunicazioni attraverso una rete).

Se cambi l'interfaccia della classe Roads, allora devi aggiornare tutti i mock e i client, ma non dovrebbe essere una considerazione se usare o meno una simulazione. Se modifichi l'implementazione senza influire sul modo in cui risponde al "mondo esterno", non è necessario cambiare nulla in quel "mondo esterno".

Una fabbrica per l'oggetto mock dovrebbe essere usata solo se la classe sotto test ha bisogno di una fabbrica per ottenere (alcuni) gli oggetti di cui ha bisogno. Altrimenti, è solo un'ulteriore complicazione per nessun guadagno.

    
risposta data 19.05.2013 - 12:43
fonte
3

Tecnicamente, devi prendere in giro tutto ciò che ti accede dalla tua unità, altrimenti stai testando la tua unità di codice e il codice a cui fa riferimento. Ora, ovviamente, questo può essere poco pratico nel mondo reale, quindi tendiamo a prendere in giro solo gli aspetti più importanti del codice, ad esempio se la tua classe di strade chiama DB per ottenere alcuni dati, prenderemmo in giro l'intera interfaccia nel DB.

Sta a te quanti sforzi hai messo per rendere il tuo codice ridicolo, a volte può essere un vero problema alterare il tuo codice in modo che usi le interfacce (soggetto a linguaggio che richiede questo, ad esempio .net, YMMV con javascript), ma può anche essere una buona pratica farlo. Il trucco è sapere fino a che punto lungo quella strada da percorrere - troppo e hai un codice non gestibile che è così disaccoppiato che puoi richiedere giorni per rintracciare quello che dovrebbe fare.

Non hai bisogno di un factory, usa invece un framework di simulazione che sostituirà automaticamente le chiamate al tuo oggetto mocked con il suo che restituisce un risultato fisso, es. da Sinon.js

    
risposta data 19.05.2013 - 14:27
fonte

Leggi altre domande sui tag