Trey Hunner (Italiano)

Trey Hunner (Italiano)

Scrivo un sacco di test unitari. Sfortunatamente, il mio codice richiede spesso patch di scimmia per essere testato correttamente. Uso spesso la funzionepatch dalla libreria mock di Michael Foord (ora disponibile in Python 3.4 come unittest.per scimmiottare il mio codice.

Mentre chattavo con altri utenti dipatch, mi sono reso conto che ognuno sembra avere il proprio modo preferito di usarlo. In questo post discuterò i modi in cui uso patch.,

Decoratore

patch può essere usato come decoratore di metodi:

o come decoratore di classi:

Uso patch come decoratore quando ho una funzione che voglio patchare durante tutto il mio test. Tendo a non usare patch come decoratore di classe e spiegherò perché di seguito.

Decorator example

Context Manager

patch può essere usato come context manager:

Preferisco usare patch come context manager quando voglio patchare una funzione solo per una parte di un test. Non uso patch come gestore di contesto quando voglio una funzione patchata per un intero test.,

Contesto il gestore di esempio

Manualmente con start e stop

patch può essere utilizzato anche manualmente patch/unpatch utilizzando start e stop metodi:

io preferisco usare le patch tramite start/stop, quando ho bisogno di una funzione per essere patchato per ogni funzione in una classe di test.

Questo è probabilmente il modo più comune che uso patch nei miei test. Spesso raggruppo i miei test in classi di test in cui ogni metodo è focalizzato sul test della stessa funzione. Pertanto di solito voglio le stesse funzioni / oggetti patchati per ogni metodo di test.,

Ho notato sopra che preferisco non usare i decoratori di classe per risolvere questo problema. Invece, preferisco usare gli attributi della classe di test per memorizzare i riferimenti alle funzioni patchate invece di accettare argomenti di patch su ogni metodo di test con i decoratori. Lo trovo più ASCIUTTO.

Attenzione: uno dei vantaggi principali delle forme di patch decorator/context manager è che gestiscono la pulizia per te. Ogni volta che chiamistart per configurare il tuo oggetto patch, ricorda sempre di chiamarestop per pulirlo., Altrimenti avrai una funzione/oggetto patchato per il resto del tuo programma in esecuzione.

esempio di avvio e arresto

Riepilogo

La patch può essere utilizzata:

  1. come metodo o decoratore di classe
  2. come gestore di contesto
  3. utilizzando i metodi start e stop

Preferisco che i miei test siano leggibili, ASCIUTTI e facili da modificare. Tendo ad usare metodi start / stop per questo motivo, ma uso spesso anche decoratori di metodi patch e talvolta uso gestori di contesto patch., È utile conoscere i diversi sapori di patch perché il tuo sapore preferito potrebbe non essere sempre il più adatto per il problema in questione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *