Riassunto
In questo modulo sono state esaminate le funzionalità pytest che consentono di scrivere test più espressivi e gestibili. È stato usato @pytest.mark.parametrize per eseguire la stessa funzione di test con più valori di input. Pytest raccoglie ogni set di parametri come caso di test separato, in modo che i report possano identificare esattamente quale input è passato o fallito.
Si è lavorato anche con le fixture. Le fixture forniscono codice di configurazione riutilizzabile, rendono esplicite le dipendenze dei test tramite argomenti di funzione e possono gestire la pulizia utilizzando l'eliminazione basata su yield e gli ambiti appropriati delle fixture. Sono state applicate queste idee scrivendo test parametrizzati e rifattorizzando un test basato su classi dagli approcci in stile setup_method() e teardown_method() verso una fixture personalizzata che utilizza la fixture tmp_path di pytest per la gestione dei file temporanei. Sono state esaminate anche le fixture predefinite, tra cui tmp_path, che fornisce una pathlib.Path directory temporanea per ogni chiamata di funzione di test e monkeypatch, che modifica temporaneamente gli attributi, i valori del dizionario, le variabili di ambiente, sys.patho la directory di lavoro corrente e ripristina tali modifiche al termine del test o della fixture richiesta.
È ora possibile:
- Usare la parametrizzazione per coprire più input senza ripetere le funzioni di test.
- Leggere l'output di pytest per diagnosticare i valori dei parametri che passano o falliscono.
- Creare fixture personalizzate per condividere la logica di installazione e pulizia.
- Scegliere gli ambiti della fixture in base alla frequenza con cui deve essere eseguita l'installazione e quando deve essere effettuata la pulizia.
- Posizionare le fixture condivise in
conftest.pyin modo che i test nella stessa directory e le relative sottodirectory possano richiederle senza importazioni esplicite. - Usare le fixture predefinite, tra cui
tmp_pathper i file temporanei emonkeypatchper le modifiche dello stato con ambito, per isolare i test che dipendono da file, variabili di ambiente, importazioni o stato esterno.
Per altre informazioni, vedere la documentazione di pytest per la parametrizzazione dei test, le fixture, le fixture predefinite, le directory temporanee e i file, la configurazione in stile xUnit e il monkeypatch.