Test di un file che fa molto affidamento su un array statico

2

Ho un file .c che gestisce fondamentalmente il proprio piccolo database di persone. Ci sono funzioni di aggiunta, rimozione, modifica e ricerca tra alcuni altri. Ha una matrice statica che usa per memorizzare i dati.

Qual è un buon metodo per testare un file come questo? Poiché l'array è statico, non riesco a inserire i miei dati.

Devo impiegare qualche trucco e creare una funzione che trasmetta un puntatore alla matrice che viene compilata nella versione di produzione? Dovrei semplicemente testare le funzioni così come sono e rendere i dati che preferiscono tramite una serie di aggiunte e rimuovi? Qual è il modo migliore per testare un file come questo?

    
posta Justin 15.05.2012 - 05:06
fonte

4 risposte

3

La cosa migliore che puoi fare è refactoring del codice per renderlo più testabile. Questo non solo offre benefici immediati nella testabilità, ma ha anche vantaggi a lungo termine come una migliore leggibilità del codice.

Se per qualche motivo non puoi refactoring questo codice, aggiungi del codice specifico per test che migliora la testabilità. Vale a dire, qualcosa che ti consente di impostare il contenuto dell'array. Puoi utilizzare #define in C per filtrare questo codice dall'esecuzione in modalità non testata.

    
risposta data 15.05.2012 - 05:15
fonte
2

Se hai un'interfaccia pubblica per manipolare e interrogare i dati, usala per verificare che il comportamento sia come previsto. È meglio non accedere direttamente alla matrice statica; l'array statico è un dettaglio di implementazione e manipolarlo direttamente renderà più difficile il refactoring del modulo in futuro.

Ciò che potrebbe essere un problema è se il modulo interagisce internamente con il filesystem per es. caricamento e memorizzazione dei dati senza essere esplicitamente indicato; Ad esempio, non esiste alcuna API pubblica di caricamento / salvataggio. Questo è sperabilmente fuori portata per te, perché questo richiede un po 'più di lavoro per essere testabile.

    
risposta data 15.05.2012 - 11:04
fonte
1

puoi refactoring il codice in questo modo

vecchio codice

   static MyType[] myArray = ...
   void oldFuncThatUsesStaticArray(Type param1, Type param2, Type param3, ...)
   {
      // ... do the processing by accessing global static myArray  
   }

nuovo codice

   static MyType[] myArray = ...
   void oldFuncThatUsesStaticArray(Type param1, Type param2, Type param3, ...)
   {
      newFuncWithArrayParameter(param1, param2, param3, ..., myArray);
   }

   void newFuncWithArrayParameter(Type param1, Type param2, ..., MyType[] myArray)
   {
      // ... do the processing by accessing the parameter myArray
      // ... that hides global static myStaticArray  
   }

per il test chiami newFuncWithArrayParameter() mentre la tua app utilizza ancora oldFuncThatUsesStaticArray()

Si noti che si tratta di pseudo-sintassi poiché non sono un c-developper

    
risposta data 15.05.2012 - 16:42
fonte
1

Come ha detto Joel in Cose che non dovresti mai fare , non dovresti mai riscrivere il codice. È possibile scrivere i codici di prova per chiamare le funzioni di aggiunta, rimozione, modifica e ricerca in questo file che verificano la correttezza delle funzioni e della matrice statica. Se i codici di test possono giudicare automaticamente il risultato del test, si ha la base per il refactoring del codice. Ogni programmatore vuole cambiare i codici originali per proprio, ma l'elemento chiave sta nel fatto che i codici originali siano stabili o meno. Altrimenti farai solo il lavoro inutile.

    
risposta data 16.05.2012 - 09:00
fonte

Leggi altre domande sui tag