Per caricare o non caricare i dati per i test unitari da file esterni

14

Quando collaudo le unità mi trovo spesso a discutere su quanta parte dei dati fornisco, e mi aspetto che torni dalle mie unità sotto test, dovrei includere nei file di test effettivi.

Il compromesso con cui sto costantemente alle prese è:

  • Se una grande parte del test (nel volume di codice) è composta da dati di input e di output, sembra difficile leggere effettivamente il test, ma posso facilmente vedere le entrate e le uscite effettive.
  • Se carico i dati di test dai file, posso facilmente testare un po 'di variazioni sul possibile input di dati, riusare facilmente i dati di test per più test, ma devo lasciare il codice sorgente per guardare un altro file per vedere cosa esattamente gli input sono.

O uno di questi è un anti-pattern?

    
posta DudeOnRock 20.12.2013 - 20:01
fonte

2 risposte

10

Per rispondere direttamente alla tua domanda - no, non credo che sia un anti-pattern se usato correttamente.

--- Risposta più dettagliata ---

Dalla mia esperienza, penso che questo dipenda molto dall'obiettivo del test. Ecco la regola generale che ho usato in passato e mi ha aiutato a decidere:

In realtà stai testando una piccola unità di codice? (Un vero test unitario)

Se sì, ho scoperto che è molto più facile creare i dati all'interno del test stesso esattamente perché posso vedere cosa viene passato. In questi casi, cercherò di solito un Jasmine -come libreria da usare perché trovo che faciliti la creazione e la manutenzione dei dati di test. Questa è una preferenza personale, però: usa ciò che ti semplifica il lavoro.

Se no, probabilmente stai testando il sistema stesso. In questi casi, carico spesso i dati da una fonte esterna, i motivi sono:

  1. Questo test non riguarda la chiarezza del codice per i programmatori (anche se è ancora importante - qualcuno deve mantenerlo), si tratta di eseguire abbastanza tipi diversi di dati attraverso l'intero blocco del sistema per essere ragionevolmente sicuri che funzioni.
  2. Spesso scriverò il codice idraulico per caricare e utilizzare i dati di test, ma i dati stessi sono creati da qualcun altro (di solito un membro del personale di QA nel mio caso). Queste persone non sono di solito programmatori quindi non posso aspettarmi che stiano modificando il codice.

Risposta così lunga, dipende da cosa stai provando e perché. Entrambi gli approcci sono utili e hanno il loro posto - scegli ciò che funziona meglio per la tua situazione.

    
risposta data 20.12.2013 - 21:17
fonte
8

Non vedo un compromesso qui. Il codice sorgente dovrebbe descrivere algoritmi, o almeno una logica aziendale, non grandi quantità di dati. Se scrivi una trasformata di Fourier, vuoi verificare che un tono sinusale sia mappato correttamente su un singolo picco, un suono misto a più picchi ecc., Ma per questo è completamente sufficiente alimentare un file chiamato sinus.wav nella routine e verificare che la struttura di output sia quella che ti aspetti.

Certo, tecnicamente non hai la certezza immediata che sinus.wav contenga davvero un tono sinusale, ma come hai detto, elencare i 100.000 valori di ampiezza nella sorgente non ti dà davvero nemmeno questo - infatti, è peggio , perché puoi almeno riprodurre un file esterno con un lettore audio per controllare, mentre i valori dei dati sepolti nel codice sorgente sono essenzialmente impossibili da fare.

    
risposta data 21.12.2013 - 11:16
fonte

Leggi altre domande sui tag