Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

대화형 Python 예제 테스트(doctest)


Python의 표준 배포판에는 'doctest' 모듈이 포함되어 있습니다. 이 모듈의 기능을 사용하면 대화형 Python 세션처럼 보이는 텍스트 조각을 검색하고 이러한 세션을 실행하여 표시된 대로 정확하게 작동하는지 확인합니다. 이러한 예는 클래스, 모듈 또는 함수의 독스트링 표현식에서 추출됩니다. Doctest는 함께 제공되는 텍스트 파일의 텍스트 파일에서도 실행할 수 있습니다.

Python에서 'docstring'은 클래스, 함수 또는 모듈의 첫 번째 표현식으로 나타나는 문자열 리터럴입니다. 스위트가 실행될 때 무시되지만 컴파일러에서 인식하여 포함하는 클래스, 함수 또는 모듈의 __doc__ 속성에 넣습니다.

독스트링은 일반적으로 Python 코드의 다른 부분에 대한 예제 사용법을 설명하기 위해 사용됩니다. doctest 모듈을 사용하면 이러한 독스트링이 간헐적인 코드 수정으로 최신 상태인지 확인할 수 있습니다.

다음 코드에서는 예제 사용법과 함께 계승 함수를 정의합니다. 예제 사용법이 올바른지 확인하려면 doctest 모듈에서 testmod() 함수를 호출하세요.

def add(a,b):
'''
>>> add(10,20)
30
>>> add('aaa','bbb')
'aaabbb'
>>> add('aaa',20)
Traceback (most recent call last):
...
TypeError: must be str, not int
'''
return a+b

먼저 위의 스크립트를 mytest.py로 입력하여 저장하고 명령줄에서 이 스크립트를 실행해 보십시오.

Python mytest.py

예제가 실패하지 않는 한 출력이 표시되지 않습니다. 이제 명령줄을

로 변경합니다.
Python mytest.py –v

이제 콘솔에 다음 결과가 표시됩니다 -

F:\Python36>python mytest.py -v
Trying:
add(10,20)
Expecting:
30
ok
Trying:
add('aaa','bbb')
Expecting:
'aaabbb'
ok
Trying:
add('aaa',20)
Expecting:
Traceback (most recent call last):
...
TypeError: must be str, not int
ok
1 items had no tests:
__main__
1 items passed all tests:
3 tests in __main__.add
3 tests in 2 items.
3 passed and 0 failed.
Test passed.

텍스트 파일의 예 확인

doctest의 또 다른 간단한 응용 프로그램은 텍스트 파일에서 대화형 예제를 테스트하는 것입니다. 이것은 testfile() 함수로 수행할 수 있습니다.

다음 텍스트는 'example.txt'라는 텍스트 파일에 저장됩니다.

Using ''add''
-------------------
This is an example text file . First import
''add'' from the ''mytest'' module:
>>> from mytest import add
>>> add(10,20)
30

파일 내용은 독스트링으로 처리됩니다. 텍스트 파일의 예제를 확인하려면 doctest 모듈의 testfile() 함수를 사용하십시오.

def add(a,b):
return a+b
if __name__ == "__main__":
import doctest
doctest.testfile("example.txt")
  • testmod()와 마찬가지로 testfile()은 예제가 실패하지 않는 한 아무 것도 표시하지 않습니다. 예제가 실패하면 실패한 예제와 실패 원인이 testmod()와 동일한 형식을 사용하여 콘솔에 인쇄됩니다.

  • 대부분의 경우 대화형 콘솔 세션의 복사 및 붙여넣기는 잘 작동하지만 doctest는 특정 Python 셸의 정확한 에뮬레이션을 시도하지 않습니다.

  • 모든 예상 출력은 코드가 포함된 마지막 '>>>' 또는 '...' 줄 바로 뒤에 와야 하며 예상 출력(있는 경우)은 다음 '>>>' 또는 전체 공백 줄로 확장됩니다.

  • 예상 출력에는 전체 공백 줄이 포함될 수 없습니다. 이러한 줄은 예상 출력의 끝을 알리기 위해 사용되기 때문입니다. 예상 출력에 빈 줄이 포함되어 있으면 doctest 예제에서 빈 줄이 예상되는 각 위치에 을 입력하세요.

이 기사에서는 doctest 모듈의 testmod() 및 testfile() 함수에 대해 논의했습니다.