[python] doctest에서 테스트가 실패할 경우 이를 처리하는 방법은?

doctest는 파이썬의 내장된 모듈로, 함수나 클래스의 동작을 예제와 함께 문서화하고 테스트할 수 있게 해줍니다. 그러나 때로는 doctest에서 테스트가 실패할 수 있습니다. 이러한 실패를 처리하는 방법에 대해 알아보겠습니다.

  1. 예외 처리를 사용하기:
    import doctest
    
    def add(a, b):
        """
        두 개의 숫자를 더하는 함수입니다.
    
        >>> add(2, 3)
        5
        >>> add('Hello', 'World')
        Traceback (most recent call last):
            ...
        TypeError: unsupported operand type(s) for +: 'int' and 'str'
        """
    
        try:
            result = a + b
        except Exception as e:
            print(f"테스트가 실패했습니다: {e}")
            raise
    
        return result
    
    if __name__ == "__main__":
        doctest.testmod()
    

    위의 예제에서는 add 함수 내에서 예외 처리를 사용하여 테스트가 실패할 경우 예외를 발생시키고, 실패한 경우에 대한 메시지를 출력합니다. 이렇게하면 테스트가 실패한 이유를 파악할 수 있습니다.

  2. doctest의 REPORTING_FLAGS를 설정하기:
    import doctest
    
    doctest.FAIL_FAST = False  # 테스트 실패 시 바로 중단하지 않음
    doctest.REPORTING_FLAGS = (
        doctest.DONT_ACCEPT_TRUE_FOR_1 |
        doctest.DONT_ACCEPT_BLANKLINE |
        doctest.ELLIPSIS |
        doctest.NORMALIZE_WHITESPACE
    )
    
    def add(a, b):
        """
        두 개의 숫자를 더하는 함수입니다.
    
        >>> add(2, 3)
        5
        >>> add('Hello', 'World')  # 테스트가 실패하지만 중단하지 않음
        'HelloWorld'
        """
    
        result = a + b
        return result
    
    if __name__ == "__main__":
        doctest.testmod()
    

    위의 예제에서는 doctest 모듈의 REPORTING_FLAGS를 설정하여 테스트가 실패할 경우 중단하지 않고 계속 진행하도록 합니다. 이 경우, 모든 테스트가 완료된 후 테스트 결과를 볼 수 있습니다.

이러한 방법들을 사용하여 doctest에서 테스트가 실패할 경우 이를 처리할 수 있습니다. 실패한 테스트를 파악하고 수정함으로써 코드의 품질을 개선할 수 있습니다.

참고: