[Python] test [was: Re: Come fareste voi?]

Daniele Varrazzo piro a develer.com
Ven 19 Feb 2010 20:45:42 CET


On Fri, 19 Feb 2010 19:36:02 +0100, Alessandro Dentella <sandro a e-den.it>
wrote:
>> O nose... io ultimamente lo apprezzo molto.
> 
> 
> In questa lista si è sponsorizzato a più riprese nose, qualcuno può dire
> come si confronta con py.test?

Sono uguali: se ne usi uno difficilmente rimpiangi l'altro (secondo me).

> A me piaciono anche i doctest quando penso ai test come documentazione
di
> API ma sia nose che py.test possono eseguire i test in formato doctest
ma
> danno un sommario molto povero ovvero cosiderano un file.txt con dentro
i
> test come un singolo test, quando il modulo doctest li considera
> sigolarmente. 
> 
> Inoltre io non sono riuscito ad usare in modo utile l'opzione per cui
> note/py.test aprono la shell di debug quando capita un errore, cosa che
> invece funziona bene sia con nose che con py.test con test di tipo
> unittest.

Perché, e qui lo dichiaro pubblicamente, i doctest sono la tecnologia di
test più abusata e meno adatta che sia venuto in mente a chiunque abbia
visto un prompt fatto così: >>>

I doctest sono un brillante modo di testare... la documentazione!!! da
quando sono diventati un modo di testare il programma? Purtroppo da
abbastanza presto, e sono uno strumento oscenamente scomodo per farlo, nel
senso che costringono a contorsioni da kamasutra per eliminare la
variabilità che c'è nell'output dei comandi [1] o per mettere insieme una
test suite con setup e teardown. In tutto questo le docstring perdono il
significato originale: essere documentazione concisa.

[1]
http://docs.python.org/library/doctest.html#option-flags-and-directives

Ed Loper, autore di Epydoc (credo anche uno degli autori di doctest), ha
usato solo doctest per documentare Epydoc stesso [2]. Ma tu guarda che si è
dovuto inventare [3] per far girare una test suite un po' più complessa?!?!
Ne è valsa la pena? A me non sembra.

[2]
http://epydoc.svn.sourceforge.net/viewvc/epydoc/trunk/epydoc/src/epydoc/test/
[3]
http://epydoc.svn.sourceforge.net/viewvc/epydoc/trunk/epydoc/src/epydoc/test/util.py?revision=1502&view=markup

Quindi per me SE uno scrive delle docstring e SE nelle docstring capita
che ci sia un esempio autocontenuto (e non "fetch restituisce un record:
>>> Record.fetch()..." e poi serve un database e come configurare il DSN di
test...) allora tu fai girare i doctest e verifichi che la docstring sia
consistente con quello che dichiara. Che poi siano anche test aggiuntivi
per la test suite completa del programma, tanto meglio. Ma che le docstring
sostituiscano una unit test apposita, secondo me, è un giochino carino,
divertente, ma durato troppo.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python