Python нь docstring-ийн агуулгыг шалгадаг стандарт doctest модулийн хамт ирдэг бөгөөд энэ нь 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аргумент (жишээ нь: функц, програм, програм)
Хэрэв та гаралтын үр дүнг үргэлж харуулахыг хүсвэл py файлын doctest.testmod() дотор verbose=True аргументыг зааж өгнө үү.
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
Хэрэв та 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 дотор биш гадаад текст файлд бичиж болно.
Текст файлыг хэрхэн бичих вэ
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 файл байхгүй байсан ч гэсэн командын мөрөөс текст файлыг шууд уншиж, тестүүдийг ажиллуулж болно.
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.