Python માં docstrings માં ટેસ્ટ કોડ લખવા માટે doctest નો ઉપયોગ કેવી રીતે કરવો.

બિઝનેસ

પાયથોન પ્રમાણભૂત doctest મોડ્યુલ સાથે આવે છે જે docstringની સામગ્રીઓનું પરીક્ષણ કરે છે, docstringમાં ઇનપુટ અને આઉટપુટ ઉદાહરણો લખવાનું સરળ બનાવે છે અને દસ્તાવેજીકરણને સમજવામાં સરળ બનાવે છે.

નીચેની માહિતી અહીં આપવામાં આવી છે.

  • ડોક્ટેસ્ટ સાથે પરીક્ષણનું એક સરળ ઉદાહરણ
    • જો ત્યાં કોઈ ભૂલ નથી
    • જો કોઈ ભૂલ હોય તો
  • વિકલ્પો અને દલીલો દ્વારા આઉટપુટ પરિણામોને નિયંત્રિત કરો
    • -vવિકલ્પ
    • verboseદલીલ (દા.ત. કાર્ય, કાર્યક્રમ, કાર્યક્રમ)
  • આદેશ વાક્યમાંથી doctest મોડ્યુલ ચલાવો
  • બાહ્ય ટેક્સ્ટ ફાઇલમાં પરીક્ષણો લખવા
    • ટેક્સ્ટ ફાઇલ કેવી રીતે લખવી
    • py ફાઇલમાંથી ફોન કર્યો
    • ટેક્સ્ટ ફાઇલને સીધી રીતે ચલાવો

ડોક્ટેસ્ટ સાથે પરીક્ષણનું એક સરળ ઉદાહરણ

ડોકસ્ટ્રિંગ એ નીચેનામાંથી એકમાં બંધાયેલ સ્ટ્રિંગ છે: (1) ચકાસવા માટેના ફંક્શનનું નામ, (2) ચકાસવા માટેના ફંક્શનનું નામ અને (3) પાયથોન ઇન્ટરેક્ટિવ મોડમાં અપેક્ષિત આઉટપુટ મૂલ્ય.

  • """
  • ''

જો ત્યાં કોઈ ભૂલ નથી

ખાતરી કરો કે કોડ ફંક્શન અને ડોકસ્ટ્રિંગ સામગ્રીઓમાં સાચો છે.

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

    return a + b


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

આ ફાઇલ ચલાવો.

$ python3 doctest_example.py

જો ત્યાં કોઈ ભૂલો નથી, તો કંઈપણ આઉટપુટ થશે નહીં.

if __name__ == '__main__'આનો અર્થ એ છે કે “જ્યારે અનુરૂપ સ્ક્રિપ્ટ ફાઇલ આદેશ વાક્યમાંથી એક્ઝિક્યુટ કરવામાં આવે ત્યારે જ અનુગામી પ્રક્રિયા ચલાવો.

જો કોઈ ભૂલ હોય તો

જો તમે નીચેનો ખોટો કોડ બનાવો છો અને એક્ઝિક્યુટ કરો છો, તો ભૂલ આઉટપુટ થશે.

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.

તે નીચે મુજબ બતાવવામાં આવે છે.

doctest માં લખેલા અપેક્ષિત આઉટપુટ મૂલ્યો.Expected
વાસ્તવિક આઉટપુટ મૂલ્યGot

વિકલ્પો અને દલીલો દ્વારા આઉટપુટ પરિણામોને નિયંત્રિત કરો

-vવિકલ્પ

જો તમે ઈચ્છો છો કે કોઈ ભૂલો ન હોય ત્યારે પણ આઉટપુટ પરિણામો પ્રદર્શિત થાય, તો આદેશ વાક્ય પર -v વિકલ્પ સાથે આદેશ ચલાવો.

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

verboseદલીલ (દા.ત. કાર્ય, કાર્યક્રમ, કાર્યક્રમ)

જો તમે હંમેશા આઉટપુટ પરિણામો પ્રદર્શિત કરવા માંગતા હો, તો py ફાઇલમાં દલીલ વર્બોઝ=ટ્રુ ઇન doctest.testmod() નો ઉલ્લેખ કરો.

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

આઉટપુટ પરિણામો હંમેશા રનટાઈમ પર -v વિકલ્પ વગર પ્રદર્શિત થશે.

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

આદેશ વાક્યમાંથી doctest મોડ્યુલ ચલાવો

if __name__ == '__main__'જો તમે તેમાં કંઈક બીજું કરવા માંગતા હો, તો તમે py ફાઈલમાં doctest.testmod()ને કૉલ કર્યા વિના સીધા જ આદેશ વાક્યમાંથી doctest મોડ્યુલ ચલાવી શકો છો.

ઉદાહરણ તરીકે, નીચેના કેસોમાં

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)

તે આદેશ વાક્ય દલીલો પ્રાપ્ત કરી શકે છે અને પ્રક્રિયાને સામાન્ય રીતે ચલાવી શકે છે.

$ python3 doctest_example_without_import.py 3 4
7

જો તમે -m વિકલ્પ સાથે સ્ક્રિપ્ટ તરીકે doctest ચલાવો છો, તો ટેસ્ટ તે ફંક્શન સામે ચલાવવામાં આવશે જેમાં doctest લખાયેલ છે. જો તમે આઉટપુટ પરિણામો દર્શાવવા માંગતા હો, તો પહેલાની જેમ -v ઉમેરો.

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

બાહ્ય ટેક્સ્ટ ફાઇલમાં પરીક્ષણો લખવા

તમે ડોકસ્ટ્રિંગને બદલે બાહ્ય ટેક્સ્ટ ફાઇલમાં ટેસ્ટ કોડ પણ લખી શકો છો.

ટેક્સ્ટ ફાઇલ કેવી રીતે લખવી

પાયથોન ઇન્ટરેક્ટિવ મોડ ફોર્મેટમાં લખો, ડોકસ્ટ્રિંગમાં વર્ણવ્યા પ્રમાણે. ઉપયોગમાં લેવાના કાર્યોને આયાત કરવું જરૂરી છે.

જો તમે ટેક્સ્ટ ફાઇલને .py ફાઇલ જેવી જ ડિરેક્ટરીમાં મુકવા માંગતા હો, તો તેને નીચે પ્રમાણે આયાત કરો.

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

py ફાઇલમાંથી ફોન કર્યો

પરીક્ષણ માટે અન્ય .py ફાઇલમાં doctest.testfile() ને કૉલ કરો.

ટેક્સ્ટ ફાઇલનો પાથ સ્પષ્ટ કરો જ્યાં ટેસ્ટ કોડ doctest.testfile() ની દલીલ તરીકે લખાયેલ છે.

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

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

ટેક્સ્ટ ફાઇલને સીધી રીતે ચલાવો

જો તમારી પાસે py ફાઇલ ન હોય તો પણ, તમે કમાન્ડ લાઇનમાંથી સીધી ટેક્સ્ટ ફાઇલ વાંચી શકો છો અને પરીક્ષણો ચલાવી શકો છો.

doctest ને સ્ક્રિપ્ટ તરીકે ચલાવવા માટે -m વિકલ્પ સાથે Python આદેશ ચલાવો. તમે આદેશ વાક્ય દલીલ તરીકે ટેક્સ્ટ ફાઇલ પાથનો ઉલ્લેખ કરી શકો છો.

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