I dati specifici dell'applicazione sono necessari per un buon test dell'unità?

1

Sto scrivendo unit test per una funzione abbastanza semplice che dipende da un insieme di dati abbastanza complicato. Essenzialmente, l'oggetto che sto manipolando rappresenta un grafico e questa funzione determina se tracciare una linea, una barra o un grafico a torta in base ai dati restituiti dal server.

Questa è una versione semplificata, usando jQuery:

setDefaultChartType: function (graphObject) {
  var prop1 = graphObject.properties.key;
  var numCols = 0;
  $.each(graphObject.columns, function (colIndex, column) {
    numCols++;
  });

  if ( numCols > 6 || ( prop1 > 1 && graphObject.data.length == 1) ) {
    graphObject.setChartType("line");
  } else if ( numCols <=6 && prop1 == 1 ) {
    graphObject.setChartType("bar");
  } else if ( numCols <=6 && prop1 > 1 ) {
    graphObject.setChartType("pie");
  }
}

La mia domanda è, dovrei usare dati falsi che vengono acquisiti dal database attuale? O posso semplicemente fabbricare dati che si adattano ai diversi casi?

Ho paura che la creazione di dati non esponga bug derivanti da modifiche nel database, ma d'altra parte, richiederebbe molto più impegno per mantenere aggiornati i dati del test che non sono sicuro è necessario.

    
posta stinkycheeseman 27.03.2012 - 18:02
fonte

4 risposte

6

Se disponi già di dati che puoi anonimizzare, utilizzalo più rapidamente di un BA (Business Analyst) per esaminare i dati dei test per assicurarti di avere una copertura adeguata.

I'm afraid that fabricating data will not expose bugs arising from changes in the database

Non è questo il punto di test unitario, se i tuoi test dipendono dai dati LIVE, quindi è un test di integrazione.

Per i test delle tue unità, ottieni un'istantanea di dati che copra TUTTE le situazioni (o quante ne esista già) dal database e utilizzale per i tuoi test unitari e costruisci casi limite con l'aiuto di un BA.

Se i tuoi requisiti non cambiano, i tuoi test non saranno superati. Se i tuoi requisiti cambiano, dovresti comunque aggiornare i test.

    
risposta data 27.03.2012 - 18:10
fonte
2

Non dovresti testare il codice che porta i dati al browser nello stesso test del codice che costruisce la tua barra / linea / grafico a torta. Dovresti semplificare la fornitura dei dati al tuo codice di costruzione del grafico e testarlo facilmente. Ciò ti fornirà anche una buona separazione delle preoccupazioni e renderà i tuoi test più veloci semplicemente prendendo i dati derisi piuttosto che i risultati di una lettura del database.

Assicurati che i test siano facili da scrivere, veloci da eseguire e abbiano un intento chiaro (breve). Una parte dell'intenzione chiara significa che è meglio mostrare i dati derisi utilizzati dal test piuttosto che affidarsi a una blackbox di dati che un altro sviluppatore dovrà eseguire SQL / leggere un file esterno per vederlo.

    
risposta data 27.03.2012 - 18:18
fonte
1

Penso che questo tipo di problema ricada sul confine ampio ma scomodo tra test unitari e test di accettazione. Se è possibile specificare un comportamento corretto senza dati reali, quindi andare per esso.

Ma molti requisiti reali (o perfezionamenti ai requisiti) spesso emergono solo quando i dati reali generano le loro brutte teste malformate, ad esempio:

"Oh, vuoi dire che quel campo usa virgolette singole (tranne quando usa virgolette doppie)?"

"Oh, puoi ottenere valori negativi lì, anche se questo non ha senso?"

"Oh, vuoi dire che il valore può superare l'intero numero.Max_Value? Nessuno ha detto ..."

e così via ...

    
risposta data 27.03.2012 - 22:47
fonte
0

Per un vero test di unità i dati dovrebbero descrivere il percorso felice così come i casi limite e dati non validi. Scopri come saranno i dati per il caso medio (percorso felice). Se funziona, prova a pensare ai dati che si trovano ai margini come nessun dato o dati che sono esattamente lunghi quanto le tue colonne consentono (casi limite). Infine controlla se il codice esegue il wirks con dati che non assomigliano a te normalmente, ad es. se memorizzi un numero di telefono come stringa, servi al tuo oggetto un numero di telefono contenente lettere (dati non validi).

    
risposta data 27.03.2012 - 18:22
fonte

Leggi altre domande sui tag