On 08 Nov 2013, at 09:43, enrico franchi <enrico.fran...@gmail.com> wrote:

> 
> 
> 
> 2013/11/8 Valerio Maggio <valerio.mag...@gmail.com>
> 
> On 08 Nov 2013, at 07:52, Marco Beri <marcob...@gmail.com> wrote:
> 
>> 2013/11/8 Piergiuliano Bossi <pgbo...@gmail.com>
>> Mi sembra di capire che in Python sia con unittest che con nose non ci sia 
>> un modo builtin per far si' che, in una gerarchia di test, la setup della 
>> superclasse venga invocata automaticamente eseguendo un test della 
>> sottoclasse. Quello che vedo e' che di solito il primo step della setup 
>> della sottoclasse e' invocare la setup della superclasse (yak!).
>> 
>> Prima domanda: confermate?
>> 
>> Sì, questo è il comportamento standard di Python.
>>  
>> Seconda domanda: vi rassegnate o c'e' qualche escamotage?
>> 
>> Ti fa schifo così?
>> 
>> class Father(object):
>>     def setUp(self):
>>         print "Padre"
>>         self.childrenSetUp()
>> 
>> class Children(Father):
>>     def childrenSetUp(self):
>>         print "Figlio"
>> 
>> x = Children()
>> x.setUp()
> 
> A me, sinceramente, un pochino si :D
> Scherzi a parte, credo che in questo caso imho hai "spostato" il problema, 
> "specializzando" il setUp della superclasse.
> 
> 
> Beh, e' un classico template method pattern… 

Si, vero!
Non so per quale motivo ero convinto che fosse un "template method" al 
contrario (in termini di ruoli).. ma in verità mi sbagliavo!
È un template a tutti gli effetti.
Probabilmente sono stato fuorviato dal fatto che pensavo più al setUp del test 
che al problema in generale…una cosa del tipo

class Father(unit test.TestCase):
    def setUp(self):
        self.pre_setup()
        # father_setup_code
        self.post_setup()

    def pre_test(self):
        pass # non ho messo raise NotImplementedError per renderlo più 
flessibile per le sottoclassi
   
    def post_test(self):
        pass

potrebbe andare in generale :-)
In ogni caso, per dovere di cronaca, aggiungerei che nose, rispetto a unittest, 
è più flessibile sulla faccenda setup: decoratore with_setup o tutti i metodi 
che rispettano il naming patter setup_<whatever>
(https://nose.readthedocs.org/en/latest/writing_tests.html#test-classes)
  

>  
> Mmm imho no… nel senso che con la metaclasse agisci a livello di classe e non 
> di istanza e il setUp deve essere invocato per *ogni* test dell'istanza 
> correntemente in esecuzione.
> Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito questo è 
> quello che mi viene in mente.
> 
> https://gist.github.com/rik0/7367887 
> 

Stupendo!! :-)
--
valerio


_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a