[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