<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On 08 Nov 2013, at 09:43, enrico franchi <<a href="mailto:enrico.franchi@gmail.com">enrico.franchi@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr" style="font-family: Helvetica; font-size: 10px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="gmail_extra"><br class="Apple-interchange-newline"><br><br><div class="gmail_quote">2013/11/8 Valerio Maggio<span class="Apple-converted-space"> </span><span dir="ltr"><<a href="mailto:valerio.maggio@gmail.com" target="_blank">valerio.maggio@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div style="word-wrap: break-word;"><br><div><div class="im"><div>On 08 Nov 2013, at 07:52, Marco Beri <<a href="mailto:marcoberi@gmail.com" target="_blank">marcoberi@gmail.com</a>> wrote:</div><br><blockquote type="cite"><div dir="ltr">2013/11/8 Piergiuliano Bossi<span class="Apple-converted-space"> </span><span dir="ltr"><<a href="mailto:pgbossi@gmail.com" target="_blank">pgbossi@gmail.com</a>></span><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div dir="ltr">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!).<div><br></div><div>Prima domanda: confermate?</div></div></blockquote><div><br>Sì, questo è il comportamento standard di Python.</div><div> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;"><div dir="ltr">Seconda domanda: vi rassegnate o c'e' qualche escamotage?<br clear="all"></div></blockquote><div><br></div><div>Ti fa schifo così?</div><div><br></div><div><div>class Father(object):</div><div>   <span class="Apple-converted-space"> </span>def setUp(self):</div><div>       <span class="Apple-converted-space"> </span>print "Padre"</div><div>       <span class="Apple-converted-space"> </span>self.childrenSetUp()</div><div><br></div><div>class Children(Father):</div><div>   <span class="Apple-converted-space"> </span>def childrenSetUp(self):</div><div>       <span class="Apple-converted-space"> </span>print "Figlio"</div><div><br></div><div>x = Children()<br></div><div>x.setUp()<br></div></div></div></div></div></blockquote><div><br></div></div><div>A me, sinceramente, un pochino si :D</div><div>Scherzi a parte, credo che in questo caso imho hai "spostato" il problema, "specializzando" il setUp della superclasse.</div><div><br></div></div></div></blockquote><div><br></div><div>Beh, e' un classico template method pattern… </div></div></div></div></blockquote><div><br></div><div>Si, vero!</div><div>Non so per quale motivo ero convinto che fosse un "template method" al contrario (in termini di ruoli).. ma in verità mi sbagliavo!</div><div>È un template a tutti gli effetti.</div><div>Probabilmente sono stato fuorviato dal fatto che pensavo più al setUp del test che al problema in generale…una cosa del tipo</div><div><br></div><div><font face="Menlo">class Father(unit test.TestCase):</font></div><div><font face="Menlo">    def setUp(self):</font></div><div><font face="Menlo">        self.pre_setup()</font></div><div><font face="Menlo">        # father_setup_code</font></div><div><font face="Menlo">        self.post_setup()</font></div><div><font face="Menlo"><br></font></div><div><font face="Menlo">    def pre_test(self):</font></div><div><font face="Menlo">        pass # non ho messo raise NotImplementedError per renderlo più flessibile per le sottoclassi</font></div><div><font face="Menlo">   </font></div><div><font face="Menlo">    def post_test(self):</font></div><div><font face="Menlo">        pass</font></div><div><br></div><div>potrebbe andare in generale :-)</div><div>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></div><div>(<a href="https://nose.readthedocs.org/en/latest/writing_tests.html#test-classes">https://nose.readthedocs.org/en/latest/writing_tests.html#test-classes</a>)</div><div>  </div><br><blockquote type="cite"><div dir="ltr" style="font-family: Helvetica; font-size: 10px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto;"><div style="word-wrap: break-word;"><div></div><div>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.</div><div>Probabilmente mi sbaglio, non c'ho riflettuto a lungo, ma ad intuito questo è quello che mi viene in mente.</div><div><br></div></div></blockquote><div><a href="https://gist.github.com/rik0/7367887">https://gist.github.com/rik0/7367887</a> </div></div><div><br></div></div></div></blockquote><div><br></div><div>Stupendo!! :-)</div></div><div>
--<br>valerio<br><br>

</div>
<br></body></html>