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