[python] doctest를 사용하여 대화식 프롬프트를 테스트하는 방법은?

doctest를 사용하여 대화식 프롬프트를 테스트하는 방법은 다음과 같습니다:

  1. 테스트할 함수 또는 모듈 파일을 준비합니다. 예를 들어, 다음과 같이 my_prompt.py 파일에 대화식 프롬프트 함수를 작성합니다:
def my_prompt():
    while True:
        user_input = input('Please enter a number (0 to quit): ')
        if user_input == '0':
            print('Exiting...')
            break
        else:
            try:
                number = int(user_input)
                print(f'Square of {number} is {number**2}')
            except ValueError:
                print('Invalid input. Please enter a valid number.')
  1. doctest 모듈을 임포트합니다:
import doctest
  1. my_prompt 함수에 대한 테스트 케이스를 작성합니다. 함수의 예제 코드와 기대 출력으로 이루어진 문자열을 작성합니다. 문자열 앞에 >>>를 붙여 함수 호출을 나타내고, 그 다음 줄에 예상되는 출력을 적습니다. 예제 코드와 기대 출력은 여러 줄에 걸쳐 작성할 수 있습니다. 예를 들어:
test_cases = """
>>> my_prompt()
Please enter a number (0 to quit): 5
Square of 5 is 25
Please enter a number (0 to quit): abc
Invalid input. Please enter a valid number.
Please enter a number (0 to quit): 0
Exiting...
"""
  1. doctest.testmod() 함수를 사용하여 테스트를 실행합니다. testmod() 함수는 doctest 모듈 내부에 있는 모든 테스트를 찾아 실행하고, 결과를 출력합니다:
doctest.testmod()

전체 코드는 다음과 같습니다:

import doctest

def my_prompt():
    while True:
        user_input = input('Please enter a number (0 to quit): ')
        if user_input == '0':
            print('Exiting...')
            break
        else:
            try:
                number = int(user_input)
                print(f'Square of {number} is {number**2}')
            except ValueError:
                print('Invalid input. Please enter a valid number.')

test_cases = """
>>> my_prompt()
Please enter a number (0 to quit): 5
Square of 5 is 25
Please enter a number (0 to quit): abc
Invalid input. Please enter a valid number.
Please enter a number (0 to quit): 0
Exiting...
"""

doctest.testmod()

doctest를 사용하여 대화식 프롬프트를 테스트함으로써, 함수가 예상대로 동작하는지 확인할 수 있습니다. 테스트 케이스를 작성할 때 주의할 점은 사용자 입력을 시뮬레이션해야 한다는 것입니다. 이를 위해 input() 함수를 사용하여 사용자 입력을 받을 수 있습니다.