예시코드 확인
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에게 질문하였고, 아래에 그 답변을 달아놓는다.
쉽게 설명하자면, 코드를 두 가지 방식으로 실행할 수 있습니다:
- 직접 실행: 코드를 작성한 파일을 직접 실행하는 경우
- 임포트(불러오기): 다른 파일에서 그 코드를 불러와서 사용하는 경우
이 두 가지 경우에서 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를 실행하면 다음과 같은 결과를 얻을 수 있다.
(어떤 테스트를 통과하거나 실패했는지 정리된 결과를 확인 가능)
'데이터 분석' 카테고리의 다른 글
[KFold]평균 검증 모델 점수와 테스트 데이터 모델 점수의 비교 (0) | 2024.09.04 |
---|---|
PolynomialFeatures()객체의 'include_bias=True' (0) | 2024.09.04 |
타이타닉 데이터 분석하기 (1) | 2024.08.28 |
인공지능 기초지식 (1) | 2024.08.28 |
유닛테스트 작성 시 주의점 (0) | 2024.08.26 |