데이터 분석

파이썬 모듈 unittest

temporubato108 2024. 8. 29. 15:20

예시코드 확인

import unittest

class IsPalindromeTests(unittest.TestCase):
    def test_level(self):
        self.assertTrue(is_palindrome("level"))

    def test_lever(self):
        self.assertFalse(is_palindrome("lever"))
        
unittest.main()

 

 

한줄씩 체크해보았다.

import unittest​
  • unittest 모듈을 임포트한다. 이 모듈은 파이썬에서 기본적으로 제공하는 단위 테스트 프레임워크로, 테스트 케이스를 작성하고 실행하는 데 사용된다.

 

class IsPalindromeTests(unittest.TestCase):
  • unittest.TestCase를 상속받은 IsPalindromeTests라는 클래스를 정의한다. 이 클래스는 하나 이상의 테스트 메서드를 포함하여 특정 기능이 제대로 동작하는지 검증한다.

 

def test_level(self):
        self.assertTrue(is_palindrome("level"))
def test_lever(self):
        self.assertFalse(is_palindrome("lever"))
  • test_level과 test_lever이라는 메서드를 정의한다. 이 메서드는 "level", "lever"이라는 문자열이 회문(palindrome)인지 테스트하는 데 사용된다. 테스트 메서드 이름은 일반적으로 test_로 시작한다.
  • assertTrue와 assertFalse를 사용하면 식이 더욱 간결해진다.

 

unittest.main()
  • 파이썬의 unittest모듈에서 제공하는 함수로, 모든 unittest.TestCase를 찾아 실행하는 역할을 한다.
  • if __name__ == '__main__': unittest.main()로 쓸 수도 있으며, 이 경우 스크립트가 직접 실행될 때만 unittest.main()이 호출되어 테스트가 실행된다. 즉, 스크립트가 모듈로 임포트될 경우에는 테스트가 실행되지 않으며, 다른 코드에서 이 스크립트를 임포트해도 unittest.main()이 호출되지 않기 때문에, 테스트가 의도하지 않게 실행되는 것을 방지할 수 있다.

 

 

 

여기서 스크립트가 모듈로 임포트 될 경우에는 테스트가 실행되지 않는다. 테스트가 의도하지 않게 실행되는 것을 방지한다. 라는게 무슨 말인지 이해가 어려워 ChatGPT에게 질문하였고, 아래에 그 답변을 달아놓는다.

 


 

쉽게 설명하자면, 코드를 두 가지 방식으로 실행할 수 있습니다:

  1. 직접 실행: 코드를 작성한 파일을 직접 실행하는 경우
  2. 임포트(불러오기): 다른 파일에서 그 코드를 불러와서 사용하는 경우

이 두 가지 경우에서 if __name__ == '__main__': unittest.main()이 어떻게 동작하는지 설명해볼게요.

1. 직접 실행하는 경우

예를 들어, test_example.py라는 파일에 테스트 코드를 작성했다고 합시다. 그리고 이 파일을 직접 실행하면:

python test_example.py

이렇게 하면 if __name__ == '__main__': unittest.main() 내부의 코드가 실행되어 테스트가 돌아갑니다. 이것은 우리가 의도한 대로 작동하는 거죠.

2. 다른 파일에서 임포트하는 경우

하지만 가끔 이 test_example.py 파일의 코드를 다른 파일에서 사용하고 싶을 때가 있습니다. 예를 들어:

# another_script.py

import test_example  # test_example.py의 코드를 가져다 쓰기

# 이 파일에서 다른 작업 수행

이렇게 다른 파일에서 test_example.py를 불러오면, unittest.main()을 바로 실행하고 싶지 않을 수 있습니다. 그 이유는 불러온 코드를 사용하고 싶을 뿐인데, 갑자기 테스트가 실행되면 코드가 예기치 않게 동작할 수 있기 때문입니다.

여기서 if __name__ == '__main__':의 역할이 중요해집니다.

  • 직접 실행하는 경우: 이 조건이 참(True)이 되어서 unittest.main()이 실행됩니다.
  • 임포트하는 경우: 이 조건이 거짓(False)이 되어서 unittest.main()이 실행되지 않습니다.

요약

  • 직접 실행: 파일을 직접 실행할 때만 테스트가 자동으로 실행됩니다.
  • 임포트: 다른 파일에서 이 파일을 불러올 때는 테스트가 자동으로 실행되지 않도록 방지합니다.

그래서, 임포트되는 상황에서도 코드가 의도하지 않게 테스트를 실행하는 것을 막아주는 안전 장치**라고 생각하면 됩니다.


 

<참고>unittest를 실행하면 다음과 같은 결과를 얻을 수 있다.

(어떤 테스트를 통과하거나 실패했는지 정리된 결과를 확인 가능)