[Python] [TDD] Mock di un decoratore

Karim lemieliste a gmail.com
Gio 8 Ago 2019 07:07:02 CEST


On Thu, Aug 8, 2019 at 12:52 AM Giovanni Porcari <
giovanni.porcari a softwell.it> wrote:

> ...
> 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.
>

Grazie Giovanni per la risposta.

Ho provato a fare un po' di prove per patchare il decoratore ed e'
abbastanza frustrante.

Questa e' una soluzione molto semplice.

from path_dove_si_trova_il_modulo import modulo as my_modulo

@patch("path_dove_si_trova_il_decoratore", lambda f:f)
def test_che_bypassa_il_decoratore(self):
     reload(my_modulo)
     # qui aggiungo altri eventuali patch che stanno nel contesto di
"my_modulo"

     # a questo punto posso usare il modulo e fare i test

     patch.stopall()
     reload(my_modulo)


Non e' proprio pythonic, ma funziona, il problema e' che ti limita di
parecchio ad usare il decoratore, in quanto il reload del modulo avviene
nel test.
Ho provato a spostare in setUp o ad usare una funzione _privata che esegue
il test, ma ho dovuto smettere perche' ci perdevo troppo tempo.

Ciao e grazie ancora.

-- 
Karim N. Gorjux
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20190808/0f59096f/attachment.html>


Maggiori informazioni sulla lista Python