파이썬에서 독스트링에 테스트 코드를 작성하기 위해 doctest를 작성하고 사용하는 방법.

사업

Python은 독스트링의 내용을 테스트하는 표준 doctest 모듈과 함께 제공되므로 독스트링에 입력 및 출력 예제를 쉽게 작성하고 문서를 더 쉽게 이해할 수 있습니다.

다음 정보가 여기에 제공됩니다.

  • doctest로 테스트하는 간단한 예
    • 오류가 없으면
    • 오류가 있는 경우
  • 옵션 및 인수로 출력 결과 제어
    • -v옵션
    • verbose인수(예: 함수, 프로그램, 프로그램)
  • 명령줄에서 doctest 모듈 실행
  • 외부 텍스트 파일에 테스트 작성
    • 텍스트 파일을 작성하는 방법
    • py 파일에서 호출
    • 텍스트 파일을 직접 실행

doctest로 테스트하는 간단한 예

독스트링은 (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

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

외부 텍스트 파일에 테스트 작성

독스트링 대신 외부 텍스트 파일에 테스트 코드를 작성할 수도 있습니다.

텍스트 파일을 작성하는 방법

docstring에 설명된 대로 Python 대화형 모드 형식으로 작성합니다. 사용할 함수를 import 해야 합니다.

테스트할 .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 파일이 없더라도 명령줄에서 직접 텍스트 파일을 읽고 테스트를 실행할 수 있습니다.

-m 옵션과 함께 Python 명령을 실행하여 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.