Come scrivere e usare doctest per scrivere codice di test in docstring in Python.

Attività commerciale

Python è dotato di un modulo doctest standard che testa il contenuto di una docstring, rendendo facile scrivere esempi di input e output nella docstring e rendendo la documentazione più facile da capire.

Le seguenti informazioni sono fornite qui.

  • Un semplice esempio di test con doctest
    • Se non c'è errore
    • Se c'è un errore
  • Controlla i risultati dell'output tramite opzioni e argomenti
    • -vOpzione
    • verboseargomento (ad esempio funzione, programma, programma)
  • Eseguire il modulo doctest dalla riga di comando
  • Scrivere test in un file di testo esterno
    • Come scrivere un file di testo
    • Chiamato dal file py
    • Eseguire direttamente un file di testo

Un semplice esempio di test con doctest

Una docstring è una stringa racchiusa in una delle seguenti: (1) il nome della funzione da testare, (2) il nome della funzione da testare, e (3) il valore di output previsto in modalità interattiva Python.

  • """
  • '''

Se non c'è errore

Assicuratevi che il codice sia corretto nella funzione e nei contenuti della docstring.

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    15
    '''

    return a + b


if __name__ == '__main__':
    import doctest
    doctest.testmod()

Eseguire questo file.

$ python3 doctest_example.py

Se non ci sono errori, non verrà emesso nulla.

if __name__ == '__main__'Questo significa “eseguire l'elaborazione successiva solo quando il file di script corrispondente viene eseguito dalla riga di comando.

Se c'è un errore

Se create ed eseguite il seguente codice sbagliato, verrà emesso un errore.

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    10
    '''

    return a * b


if __name__ == '__main__':
    import doctest
    doctest.testmod()
$ python3 doctest_example_error.py
**********************************************************************
File "doctest_example_error.py", line 3, in __main__.add
Failed example:
    add(1, 2)
Expected:
    3
Got:
    2
**********************************************************************
File "doctest_example_error.py", line 5, in __main__.add
Failed example:
    add(5, 10)
Expected:
    10
Got:
    50
**********************************************************************
1 items had failures:
   2 of   2 in __main__.add
***Test Failed*** 2 failures.

È mostrato come segue.

Valori di output attesi scritti in doctest.Expected
Valore di uscita effettivoGot

Controlla i risultati dell'output tramite opzioni e argomenti

-vOpzione

Se volete che i risultati dell'output vengano visualizzati anche quando non ci sono errori, eseguite il comando con l'opzione -v sulla linea di comando.

$ python3 doctest_example.py -v
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

verboseargomento (ad esempio funzione, programma, programma)

Se volete visualizzare sempre i risultati dell'output, specificate l'argomento verbose=True in doctest.testmod() nel file py.

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

I risultati dell'output saranno sempre visualizzati senza l'opzione -v in fase di esecuzione.

$ python3 doctest_example_verbose.py
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    __main__
1 items passed all tests:
   2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

Eseguire il modulo doctest dalla riga di comando

if __name__ == '__main__'Se volete fare qualcos'altro in esso, potete eseguire il modulo doctest direttamente dalla linea di comando senza chiamare doctest.testmod() nel file py.

Per esempio, nei seguenti casi

def add(a, b):
    '''
    >>> add(1, 2)
    3
    >>> add(5, 10)
    15
    '''

    return a + b


if __name__ == '__main__':
    import sys
    result = add(int(sys.argv[1]), int(sys.argv[2]))
    print(result)

Può ricevere argomenti dalla linea di comando ed eseguire il processo come al solito.

$ python3 doctest_example_without_import.py 3 4
7

Se eseguite doctest come script con l'opzione -m, il test verrà eseguito contro la funzione in cui è scritto doctest. Se vuoi visualizzare i risultati dell'output, aggiungi -v come prima.

$ python3 -m doctest doctest_example_without_import.py

$ python3 -m doctest -v doctest_example_without_import.py
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items had no tests:
    doctest_example_without_import
1 items passed all tests:
   2 tests in doctest_example_without_import.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

Scrivere test in un file di testo esterno

Potete anche scrivere il codice di test in un file di testo esterno invece che nella docstring.

Come scrivere un file di testo

Scrivere nel formato interattivo di Python, come descritto nella docstring. È necessario importare le funzioni da utilizzare.

Se volete mettere il file di testo nella stessa directory del file .py da testare, basta importarlo come segue.

>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15

Chiamato dal file py

Chiamare doctest.testfile() in un altro file .py per i test.

Specificare il percorso del file di testo dove viene scritto il codice di test come argomento di doctest.testfile().

import doctest
doctest.testfile('doctest_text.txt')

Eseguite questo file py.

$ python3 doctest_example_testfile.py -v
Trying:
    from doctest_example import add
Expecting nothing
ok
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items passed all tests:
   3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.

Eseguire direttamente un file di testo

Anche se non avete il file py, potete leggere il file di testo direttamente dalla linea di comando ed eseguire i test.

Eseguite il comando Python con l'opzione -m per eseguire doctest come uno script. Puoi specificare il percorso del file di testo come argomento della linea di comando.

$ python3 -m doctest -v doctest_text.txt
Trying:
    from doctest_example import add
Expecting nothing
ok
Trying:
    add(1, 2)
Expecting:
    3
ok
Trying:
    add(5, 10)
Expecting:
    15
ok
1 items passed all tests:
   3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.
Copied title and URL