របៀបសរសេរ និងប្រើប្រាស់ doctest ដើម្បីសរសេរកូដសាកល្បងក្នុង docstrings ក្នុង Python។

អាជីវកម្ម

Python ភ្ជាប់មកជាមួយម៉ូឌុល doctest ស្តង់ដារដែលសាកល្បងមាតិកានៃ docstring ដែលធ្វើឱ្យវាងាយស្រួលក្នុងការសរសេរ input និង output ឧទាហរណ៍នៅក្នុង docstring និងធ្វើឱ្យឯកសារងាយស្រួលយល់។

ព័ត៌មានខាងក្រោមត្រូវបានផ្តល់ជូននៅទីនេះ។

  • ឧទាហរណ៍សាមញ្ញនៃការធ្វើតេស្តជាមួយ doctest
    • ប្រសិនបើគ្មានកំហុស
    • ប្រសិនបើមានកំហុស
  • គ្រប់គ្រងលទ្ធផលលទ្ធផលដោយជម្រើស និងអាគុយម៉ង់
    • -vជម្រើស
    • verboseអាគុយម៉ង់ (ឧ. មុខងារ, កម្មវិធី, កម្មវិធី)
  • ដំណើរការម៉ូឌុល doctest ពីបន្ទាត់ពាក្យបញ្ជា
  • ការធ្វើតេស្តសរសេរនៅក្នុងឯកសារអត្ថបទខាងក្រៅ
    • របៀបសរសេរឯកសារអត្ថបទ
    • ហៅចេញពីឯកសារ py
    • ប្រតិបត្តិឯកសារអត្ថបទដោយផ្ទាល់

ឧទាហរណ៍សាមញ្ញនៃការធ្វើតេស្តជាមួយ doctest

docstring គឺជា​ខ្សែអក្សរ​ដែល​បាន​ភ្ជាប់​ក្នុង​មួយ​ក្នុង​ចំណោម​ខាងក្រោម​នេះ​៖ (1) ឈ្មោះ​នៃ​អនុគមន៍​ដែល​ត្រូវ​សាកល្បង (2) ឈ្មោះ​នៃ​អនុគមន៍​ដែល​ត្រូវ​សាកល្បង និង (3) តម្លៃ​លទ្ធផល​ដែល​រំពឹង​ទុក​ក្នុង​ទម្រង់​អន្តរកម្ម Python ។

  • """
  • ''

ប្រសិនបើគ្មានកំហុស

ត្រូវប្រាកដថាលេខកូដត្រឹមត្រូវនៅក្នុងមុខងារ និងមាតិកាឯកសារ។

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អាគុយម៉ង់ (ឧ. មុខងារ, កម្មវិធី, កម្មវិធី)

ប្រសិន​បើ​អ្នក​ចង់​បង្ហាញ​លទ្ធផល​លទ្ធផល​ជានិច្ច សូម​បញ្ជាក់​អាគុយម៉ង់ verbose=True ក្នុង doctest.testmod() ក្នុង​ឯកសារ py ។

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__'ប្រសិនបើអ្នកចង់ធ្វើអ្វីមួយផ្សេងទៀតនៅក្នុងវា អ្នកអាចដំណើរការម៉ូឌុល doctest ដោយផ្ទាល់ពីបន្ទាត់ពាក្យបញ្ជាដោយមិនហៅ doctest.testmod() នៅក្នុងឯកសារ py ។

ឧទាហរណ៍នៅក្នុងករណីដូចខាងក្រោម

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

ប្រសិនបើអ្នកដំណើរការ doctest ជាស្គ្រីបដែលមានជម្រើស -m ការធ្វើតេស្តនឹងដំណើរការប្រឆាំងនឹងមុខងារដែល 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.

ការធ្វើតេស្តសរសេរនៅក្នុងឯកសារអត្ថបទខាងក្រៅ

អ្នកក៏អាចសរសេរកូដសាកល្បងនៅក្នុងឯកសារអត្ថបទខាងក្រៅជំនួសឱ្យនៅក្នុង docstring ។

របៀបសរសេរឯកសារអត្ថបទ

សរសេរក្នុងទម្រង់ទម្រង់អន្តរកម្ម Python ដូចដែលបានពិពណ៌នានៅក្នុង docstring។ វាចាំបាច់ក្នុងការនាំចូលមុខងារដែលត្រូវប្រើ។

ប្រសិនបើអ្នកចង់ដាក់ឯកសារអត្ថបទក្នុងថតដូចគ្នានឹងឯកសារ .py ដែលត្រូវសាកល្បង គ្រាន់តែនាំចូលវាដូចខាងក្រោម។

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

ហៅចេញពីឯកសារ py

ហៅទៅ doctest.testfile() នៅក្នុងឯកសារ .py មួយផ្សេងទៀតសម្រាប់ការធ្វើតេស្ត។

បញ្ជាក់ផ្លូវនៃឯកសារអត្ថបទដែលកូដសាកល្បងត្រូវបានសរសេរជាអាគុយម៉ង់នៃ 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 ក៏ដោយ អ្នកអាចអានឯកសារអត្ថបទដោយផ្ទាល់ពីបន្ទាត់ពាក្យបញ្ជា ហើយដំណើរការការធ្វើតេស្ត។

ដំណើរការពាក្យបញ្ជា Python ជាមួយជម្រើស -m ដើម្បីដំណើរការ doctest ជាស្គ្រីប។ អ្នកអាចបញ្ជាក់ផ្លូវឯកសារអត្ថបទជាអាគុយម៉ង់បន្ទាត់ពាក្យបញ្ជា។

$ 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