2009-11-27 12 views
9

Ho un modulo Python con docstring nei metodi di classe e un esempio reale nel modulo docstring. La distinzione è che il metodo-docstring è stato accuratamente elaborato per essere test completamente ripetibili, mentre l'esempio del mondo reale è solo una copia della storia di una shell Linux, che è successo per invocare l'interprete python.Python doctest: salta l'intero blocco?

E.g.

""" 
Real-world example: 

# python2.5 
Python 2.5 (release25-maint, Jul 20 2008, 20:47:25) 
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from packagename import module 
>>> module.show_real_world_usage() 
'Hello world!' 
""" 

class SomeClass(object): 
    def someMethod(self): 
     """ 
     >>> 1 == 1 
     True 
     """ 

voglio correre il doctest in SomeClass.someMethod, ma non nella docstring del modulo.

La direttiva Doctest +SKIP funziona solo per linea, il che significherebbe l'aggiunta di 10 s di righe al mio esempio del mondo reale. Brutta!

C'è un modo per rendere doctest saltare un intero blocco? Un po 'come lo <!-- ... --> in HTML?

+0

sono d'accordo. Questa è una caratteristica che sarebbe molto utile. –

risposta

6

La mia soluzione è stata di tagliare i leader di 3 caratteri >>> e ... in cui voglio che doctest li salti sopra, rendendoli di 2 caratteri.

Così

""" 
>>> from packagename import module 
>>> module.show_real_world_usage() 
'Hello world!' 
""" 

è diventato

""" 
>> from packagename import module 
>> module.show_real_world_usage() 
'Hello world!' 
""" 

Epydoc non visualizza questo come bene come fa doctests, ma posso vivere con questo. Sarebbe tuttavia gradita una direttiva skip-until-further-notice in doctest.

1

Se non è un vero doctest con qualsiasi mezzo, è sufficiente assegnare il valore a una variabile. Ad esempio,

example_usage = """ 
Real-world example: 

# python2.5 
... 
""" 

causerà che il "test" non venga valutato.

Potrebbe essere meglio usare __example_usage__ (o qualcos'altro circondato da caratteri di sottolineatura doppio) in modo che sia chiaro che è una variabile "magica" e non una variabile da utilizzare nel contesto dello script.

+1

Neat, ma poi è anche invisibile per aiutare() ed epydoc. – RobM

+0

Non sono sicuro di 'help()', ma puoi semplicemente aggiungere un nuovo campo in epydoc: http://epydoc.sourceforge.net/epydoc.html#adding-new-fields –

9

Avvolgere l'esempio in una funzione e quindi saltare la funzione di chiamata:

""" 
>>> def example(): 
>>> from packagename import module 
>>> module.show_real_world_usage() 
>>> example() # doctest: +SKIP 
'Hello world!' 
""" 
+0

Penso che manchi un Colon, penso che dovrebbe essere '# doctest: + SKIP', non funzionerebbe per me senza di esso ma buon lavoro, grazie –

+0

@IdaN Yup. Le direttive richiedono un colon. Grazie: http://docs.python.org/2/library/doctest.html#directives – lambacck

Problemi correlati