Python ရှိ docstrings တွင် စမ်းသပ်ကုဒ်ကို ရေးရန် doctest ကို မည်သို့ရေးနည်း။

စီးပွားရေးလုပ်ငန်း

Python သည် docstring တစ်ခု၏ အကြောင်းအရာများကို စမ်းသပ်သည့် စံ doctest module တစ်ခု ပါ၀င်ပြီး docstring တွင် input နှင့် output နမူနာများကို ရေးရန် လွယ်ကူစေပြီး documentation ကို နားလည်ရန် ပိုမိုလွယ်ကူစေသည်။

အောက်ပါအချက်အလက်များကို ဤနေရာတွင် ဖော်ပြပေးထားပါသည်။

  • doctest ဖြင့်စမ်းသပ်ခြင်း၏ရိုးရှင်းသောဥပမာ
    • အမှားအယွင်းမရှိလျှင်
    • အမှားအယွင်းရှိလျှင်
  • ရွေးချယ်မှုများနှင့် အကြောင်းပြချက်များဖြင့် အထွက်ရလဒ်များကို ထိန်းချုပ်ပါ။
    • -vရွေးချယ်မှု
    • verboseအကြောင်းပြချက် (ဥပမာ၊ လုပ်ဆောင်ချက်၊ ပရိုဂရမ်၊ ပရိုဂရမ်)
  • command line မှ doctest module ကိုဖွင့်ပါ။
  • ပြင်ပစာသားဖိုင်တွင် စမ်းသပ်မှုများ ရေးသားခြင်း။
    • စာသားဖိုင်ကိုဘယ်လိုရေးရမလဲ
    • py ဖိုင်မှ ခေါ်သည်။
    • စာသားဖိုင်ကို တိုက်ရိုက်လုပ်ဆောင်ပါ။

doctest ဖြင့်စမ်းသပ်ခြင်း၏ရိုးရှင်းသောဥပမာ

docstring သည် အောက်ပါအရာများထဲမှ တစ်ခုတွင် အကျုံးဝင်သည့် စာကြောင်းတစ်ခုဖြစ်သည်- (1) စမ်းသပ်ရမည့် လုပ်ဆောင်ချက်အမည်၊ (2) စမ်းသပ်ရမည့် လုပ်ဆောင်ချက်အမည် နှင့် (3) Python အပြန်အလှန်တုံ့ပြန်မှုမုဒ်တွင် မျှော်လင့်ထားသော အထွက်တန်ဖိုး။

  • """
  • ''

အမှားအယွင်းမရှိလျှင်

လုပ်ဆောင်ချက်နှင့် docstring အကြောင်းအရာများတွင် ကုဒ်မှန်ကန်ကြောင်း သေချာပါစေ။

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__'၎င်းသည် “ သက်ဆိုင်ရာ script ဖိုင်ကို command line မှလုပ်ဆောင်သောအခါမှသာ နောက်ဆက်တွဲလုပ်ဆောင်မှုကို လုပ်ဆောင်သည်ဟု ဆိုလိုသည်။

အမှားအယွင်းရှိလျှင်

အောက်ဖော်ပြပါ မှားယွင်းသောကုဒ်ကို ဖန်တီးပြီး လုပ်ဆောင်ပါက၊ အမှားတစ်ခု ထွက်လာပါမည်။

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ရွေးချယ်မှု

အမှားအယွင်းမရှိသည့်တိုင် output ရလဒ်များကိုပြသလိုပါက၊ command line ရှိ -v option ဖြင့် command ကို run ပါ။

$ 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() တွင် အငြင်းအခုံ verbose=True ကို သတ်မှတ်ပါ။

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

runtime တွင် -v option မပါဘဲ output ရလဒ်များကိုအမြဲပြသလိမ့်မည်။

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

command line မှ doctest module ကိုဖွင့်ပါ။

if __name__ == '__main__'၎င်းတွင် အခြားတစ်ခုခုကို ပြုလုပ်လိုပါက၊ py ဖိုင်တွင် doctest.testmod() မခေါ်ဘဲ doctest module ကို တိုက်ရိုက် run နိုင်ပါသည်။

ဥပမာအားဖြင့်၊ အောက်ပါကိစ္စများတွင်

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)

၎င်းသည် command line arguments များကို လက်ခံနိုင်ပြီး ပုံမှန်အတိုင်း လုပ်ငန်းစဉ်ကို လုပ်ဆောင်နိုင်သည်။

$ python3 doctest_example_without_import.py 3 4
7

-m option ဖြင့် script တစ်ခုအနေဖြင့် doctest ကို run ပါက၊ test သည် doctest ရေးထားသည့် function ကို ဆန့်ကျင်မည်ဖြစ်သည်။ အထွက်ရလဒ်များကိုပြသလိုပါက -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.

ပြင်ပစာသားဖိုင်တွင် စမ်းသပ်မှုများ ရေးသားခြင်း။

docstring တွင်အစား ပြင်ပစာသားဖိုင်တွင် စမ်းသပ်ကုဒ်ကိုလည်း ရေးနိုင်သည်။

စာသားဖိုင်ကိုဘယ်လိုရေးရမလဲ

docstring တွင်ဖော်ပြထားသည့်အတိုင်း Python အပြန်အလှန်အကျိုးသက်ရောက်မှုမုဒ်ဖော်မတ်ဖြင့်ရေးပါ။ အသုံးပြုရမည့် လုပ်ဆောင်ချက်များကို တင်သွင်းရန် လိုအပ်ပါသည်။

စမ်းသပ်မည့် .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 ဖိုင်မရှိလျှင်ပင်၊ သင်သည် command line မှစာသားဖိုင်ကိုတိုက်ရိုက်ဖတ်နိုင်ပြီးစမ်းသပ်မှုများကိုလုပ်ဆောင်နိုင်သည်။

script တစ်ခုအနေဖြင့် doctest ကို run ရန် -m option ဖြင့် Python command ကို run ပါ။ စာသားဖိုင်လမ်းကြောင်းကို command line argument အဖြစ် သတ်မှတ်နိုင်ပါတယ်။

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