[Python] doctest con funzioni che aprono files

Daniele Varrazzo piro a develer.com
Mer 26 Nov 2008 18:25:25 CET



On Wed, 26 Nov 2008 17:44:55 +0100, "Giovanni Marco Dall'Olio"
<dalloliogm a gmail.com> wrote:
> Ciao a tutti,
> e' da un po' di tempo che utilizzo doctest, e sono felice :).
> 
> Lo trovo molto comodo per scrivere funzioni che calcolano statistiche
> e parsano particolari formati di files.
> 
> Quello che non capisco ancora e' come utilizzarlo per testare funzioni
> che prendano in input il nome (path) di un file, e lo aprano.

Tu sei sicuro che una docstring nella quale hai buttato dentro tutto il
codice boilerplate per fargli aprire un file temporaneo abbia ancora una
qualche utilità come docstring?

È una mia idea personale, ma le doctest a me sembrano innanzitutto "doc",
e solo come cosa secondaria e pythonesca "test". In particolar modo, è
più un test della documentazione stessa che della funzione. Ma questo può
ovviamente essere stiracchiato un pochino, e quindi il test, come effetto
collaterale, testa che la funzione non cominci a sbagliare. Stiracchiando
stiracchiando però aggiungi "documentazione" utile ai fini del test e non
ai fini della documentazione, fino al punto che non è più documentazione
in lingua umana, ma codice Python che descrive codice Python.

È sempre una mia opinione personale, ma mi sembra che le doctest non
vogliano essere questo, al punto che non offrono nessuna facility di
costruzione di "test suite". A me sembra che quello che tu stia facendo sia
una unit test completa, che ha bisogno di dati di appoggio ed eventualmente
funzioni di setup e cleanup.

> Una seconda opzione e' quella di usare tempfile.NamedTemporaryFile.
> Il problema e' che e' una opzione un poco brutta esteticamente, che
> aggiunge un sacco di istruzioni non necessarie nella documentazione
> (incasinandola).

Questo è quello che farei io, ma in una test suite. Questo credo sia il
punto dove la doctest smette di essere "bella" (documentazione che come
effetto collaterale si auto-testa) e diventa "brutta" (codice di test
scritto dove sarebbe dovuta andare la documentazione).

Puoi avere tutti e due, unittest e doctest non sono esclusive. Penso che le
doctest siano una bella abitudine: fossi in te sceglierei pragmaticamente
"il meglio dei due mondi" :)

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


Maggiori informazioni sulla lista Python