[Python] [TDD] Mock di un decoratore

Giovanni Porcari giovanni.porcari a softwell.it
Mer 7 Ago 2019 16:52:41 CEST



> Il giorno 7 ago 2019, alle ore 08:08, Karim <lemieliste a gmail.com> ha scritto:
> 
> Salve lista, stavo per scrivere su telegram, ma poi mi sono detto, naah... ed eccomi qui
> 
> Sto cercando di capire come posso mocckare un decoratore di una view, in particolare devo decorare un metodo di una view in django
> 
> class MyNiceClassView:
> 
>     @decorator_to_mock
>     def post(...):
> 
> Ora, io devo testare la mia post, soltanto che il mio decoratore fa alcuni test che vorrei semplicemente evitare. Dato che python carica i moduli solo una volta, una volta che io faccio:
> 
> my_view = MyNiceClassView.as_view()
> 
> la `my_view` ora e' gia' wrappata dal decoratore.
> 
> Cercando su stack overflow, una soluzione suggerita e' quella di 
> 
> 1) importarsi il modulo
>         from app import modulo
> 2) monkey patchare il decorator con un decorator scemo nel modulo importato
>       modulo.decoratore = decoratore_scemo
> 3) importarsi la view da testare.
>       from app.modulo import ViewDaTestare
> 4) testare la view
> 
> Ora, questo processo funziona, se non fai nessuna patch e/o non carichi nulla prima della monkey patch. Inoltre se il decorator e' gia' caricato da altri test tutto va a farsi benedire perche' python importa solamente una volta.
> 
> Avete dei suggerimenti su come fare una bella e pulita mocckata del decorator?


Potresti provare prima di eseguire il test a verifica re in sys.modules. Se il tuo modulo non c’è lo importi e poi fai la patch. Altrimenti fai la patch sul modulo importato. 

Non so se può funzionare ma è la sola cosa che mi viene in mente quando devi alterare moduli già importati. 

Ciao

G
> 
> Ciao
> 
> 
> -- 
> Karim N. Gorjux
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> https://lists.python.it/mailman/listinfo/python
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20190807/6e98a1a6/attachment.html>


Maggiori informazioni sulla lista Python