Jinsi ya kuandika na kutumia doctest kuandika nambari ya mtihani kwenye hati kwenye Python.

Biashara

Python inakuja na moduli ya kawaida ya doctest ambayo hujaribu yaliyomo kwenye docstring, na kuifanya iwe rahisi kuandika mifano ya pembejeo na matokeo kwenye maandishi na kufanya hati kueleweka rahisi.

Habari ifuatayo imetolewa hapa.

  • Mfano rahisi wa kupima na doctest
    • Ikiwa hakuna makosa
    • Ikiwa kuna hitilafu
  • Dhibiti matokeo ya pato kwa chaguo na hoja
    • -vChaguo
    • verbosehoja (k.m. kazi, programu, programu)
  • Endesha moduli ya doctest kutoka kwa safu ya amri
  • Kuandika majaribio katika faili ya maandishi ya nje
    • Jinsi ya kuandika faili ya maandishi
    • Imeitwa kutoka kwa faili ya py
    • Tekeleza faili ya maandishi moja kwa moja

Mfano rahisi wa kupima na doctest

Mfuatano wa hati ni mfuatano ulioambatanishwa katika mojawapo ya yafuatayo: (1) jina la chaguo za kukokotoa litakalojaribiwa, (2) jina la chaguo la kukokotoa litakalojaribiwa, na (3) thamani inayotarajiwa ya matokeo katika hali ya mwingiliano ya Python.

  • """
  • ''

Ikiwa hakuna makosa

Hakikisha kwamba msimbo ni sahihi katika kipengele cha kukokotoa na maudhui ya hati.

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

    return a + b


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

Endesha faili hii.

$ python3 doctest_example.py

Ikiwa hakuna makosa, hakuna kitakachotolewa.

if __name__ == '__main__'Hii inamaanisha “tekeleze usindikaji unaofuata tu wakati faili inayolingana ya hati inatekelezwa kutoka kwa safu ya amri.

Ikiwa kuna hitilafu

Ukiunda na kutekeleza nambari ifuatayo isiyo sahihi, hitilafu itatolewa.

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.

Inaonyeshwa kama ifuatavyo.

Thamani za matokeo zinazotarajiwa zimeandikwa kwa doctest.Expected
Thamani halisi ya patoGot

Dhibiti matokeo ya pato kwa chaguo na hoja

-vChaguo

Ikiwa unataka matokeo ya pato kuonyeshwa hata wakati hakuna makosa, endesha amri na -v chaguo kwenye mstari wa amri.

$ 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.

verbosehoja (k.m. kazi, programu, programu)

Ikiwa unataka kuonyesha matokeo kila wakati, taja hoja verbose=True katika doctest.testmod() kwenye faili ya py.

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

Matokeo ya pato yataonyeshwa kila wakati bila -v chaguo wakati wa kukimbia.

$ 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.

Endesha moduli ya doctest kutoka kwa safu ya amri

if __name__ == '__main__'Ikiwa unataka kufanya kitu kingine ndani yake, unaweza kuendesha moduli ya doctest moja kwa moja kutoka kwa safu ya amri bila kupiga doctest.testmod() kwenye faili ya py.

Kwa mfano, katika kesi zifuatazo

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)

Inaweza kupokea hoja za mstari wa amri na kutekeleza mchakato kama kawaida.

$ python3 doctest_example_without_import.py 3 4
7

Ukiendesha doctest kama hati iliyo na -m chaguo, jaribio litaendeshwa dhidi ya chaguo la kukokotoa ambalo doctest imeandikwa. Ikiwa unataka kuonyesha matokeo, ongeza -v kama hapo awali.

$ 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.

Kuandika majaribio katika faili ya maandishi ya nje

Unaweza pia kuandika msimbo wa majaribio katika faili ya maandishi ya nje badala ya maandishi.

Jinsi ya kuandika faili ya maandishi

Andika katika umbizo la modi ya maingiliano ya Python, kama ilivyoelezewa kwenye hati. Ni muhimu kuagiza kazi za kutumika.

Ikiwa unataka kuweka faili ya maandishi katika saraka sawa na faili ya .py ili kujaribiwa, iingize kama ifuatavyo.

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

Imeitwa kutoka kwa faili ya py

Piga simu doctest.testfile() katika faili nyingine ya .py kwa majaribio.

Bainisha njia ya faili ya maandishi ambapo msimbo wa jaribio umeandikwa kama hoja ya doctest.testfile().

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

Endesha faili hii ya 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.

Tekeleza faili ya maandishi moja kwa moja

Hata kama huna faili ya py, unaweza kusoma faili ya maandishi moja kwa moja kutoka kwa mstari wa amri na kuendesha vipimo.

Endesha amri ya Python na -m chaguo la kuendesha doctest kama hati. Unaweza kutaja njia ya faili ya maandishi kama hoja ya mstari wa amri.

$ 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