[python] doctest를 사용하여 복잡한 데이터 구조를 테스트하는 방법은?

doctest는 파이썬의 표준 라이브러리에 포함된 모듈로, 코드의 예제와 결과를 문서화하고 동시에 테스트하는 도구입니다. 복잡한 데이터 구조를 테스트하기 위해 doctest를 사용하는 방법에 대해 알아보겠습니다.

  1. 데이터 구조 및 함수 작성 테스트하려는 복잡한 데이터 구조와 관련 함수를 작성해야 합니다. 예를 들어, 다음과 같은 리스트를 가진 클래스를 테스트해보겠습니다.

    class MyList:
        def __init__(self, values):
            self.values = values
    
        def length(self):
            return len(self.values)
    
        def sum(self):
            return sum(self.values)
    
  2. doctest 작성 doctest는 코드 안에 인라인으로 작성할 수 있습니다. 함수와 메소드 정의 바로 아래에 작성하며, »> 표시를 사용하여 예상 결과를 작성합니다.

    class MyList:
        # ...
    
        def length(self):
            """
            >>> MyList([1, 2, 3]).length()
            3
    
            >>> MyList([]).length()
            0
            """
            return len(self.values)
    
        # ...
    

    여기서는 length 메소드의 예제들을 작성했습니다. 리스트의 길이를 반환하는 메소드이므로, 예상 결과와 실제 결과를 비교하여 테스트합니다.

  3. 테스트 실행 작성한 doctest를 실행하여 테스트할 수 있습니다. 모듈 레벨에서 테스트하는 경우, 아래와 같이 코드를 추가해야 합니다.

    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    

    이제 코드를 실행하면 doctest가 예상 결과와 실제 결과를 비교하여 테스트를 수행합니다.

    $ python my_list.py -v
    ...
    Ran X tests in Y seconds (Z passed, 0 failed)
    

    -v 옵션을 사용하면 세부 정보를 출력해줍니다.

이제 doctest를 사용하여 복잡한 데이터 구조를 테스트하는 방법을 알게 되었습니다. doctest는 코드 예제를 문서화하는 동시에 효과적인 테스팅 도구로 활용할 수 있습니다. 자세한 내용은 파이썬 공식 문서에서 확인할 수 있습니다.