Ho una funzione che utilizza le informazioni da un file di configurazione. Come posso testare la funzione? Idealmente, vorrei iniettare la mia versione del file di configurazione e testare da lì, ma non sto usando l'iniezione di dipendenza.
Devi scrivere un test che funzioni indipendentemente dal file di configurazione, in modo da poter verificare che, in base alla "configurazione simulata", l'output della funzione o del comportamento di tale funzione sia corretto.
È necessario iniettare il file di configurazione o il valore che si sta tentando di simulare sulla funzione in prova. Questo è l'unico modo per garantire che ogni volta che si ha quel valore, il comportamento della funzione è indicato dal file di configurazione.
Idealmente, si isolerebbe anche la classe che contiene e detta il comportamento del file di configurazione alla classe / funzione che legge questo file. Quando scrivi un test, uno degli obiettivi dovrebbe essere l'isolamento del codice sotto test.
Dipende da come carichi i dati dal tuo file di configurazione.
Idealmente, scrivi il tuo programma per essere facilmente testabile e ridurre le dipendenze non necessarie. Assicurati quindi che se cambi la posizione o il formato del tuo file di configurazione, ciò influisce sul minor numero possibile di codice. Quindi assicurati che il codice possa anche gestire il test.
Se hai un singolo oggetto o classe o un file o una serie di funzioni che trattano (s) con il caricamento dal file di configurazione, cambia quello in modo che possa prendere un altro file di configurazione o anche solo stub variabili a livello di codice senza bisogno di una configurazione file.
Se si carica il file di configurazione in più punti e il suo percorso è hardcoded, è un po 'più difficile (anche in una situazione non ideale). Potresti provare a:
Se definisci un gruppo di valori in un file python e questo è il tuo config, refactor: adatta il tuo file di configurazione in modo che tu possa cambiare i valori che restituisce. Ad esempio, è possibile creare una serie di funzioni per restituire i valori di configurazione predefiniti alla configurazione codificata, ma potrebbero essere modificati per un programma di test.
Bene, l'iniezione di dipendenza mi viene in mente come un tipo predefinito di approccio in scatola per il test di configurazione.
Tuttavia, ci sono altri modi, in particolare la progettazione del codice per eliminare la dipendenza dal file di configurazione tutti insieme.
Puoi trovare maggiori dettagli in un esempio canonico di dipendenza eliminazione di Brian Geihsler che parla in modo specifico dei file di configurazione.
Leggi altre domande sui tag testing programming-practices python