이번에는 unittest을 통해서 python 테스트 코드 작성 방법과 테스트 코드를 작성하는 이유에 대해서 조금 포괄적으로 다뤄보고자 한다.
테스트코드
테스트 코드를 작성하면 좋은 이점들을 아래와 같이 정리했다.
- 디버깅 비용(시간) 절감 : 코드를 작성하다 보면, 오류나 결함을 수정하는 데에 있어서 많은 소요비용을 지불한다. 테스트 코드는 개발자가 작성한 코드를 실행하여 예상된 결과가 나오는지 확인하는 데 사용된다.
- 코드 변경에 대한 불안감 해소 : 가끔 코드를 수정하다 보면 잘 되던 것들도 안 되는 경우가 생기는데 이러한 문제를 해결하게 도와준다.
- 더 나은 문서자료 : 개발자는 항상 좋은 코드를 작성하기 위해서 노력할 필요가 있다. 테스트 코드는 이런 부분에 있어서 일반적인 문서 자료보다 신빙성 있는 신뢰성을 제공한다.
- 좋은 코드는 테스트하기 쉽다 : 코드는 강결합보다는 느슨한 결합을 통해 유지되어야 할 필요가 있다. 테스트코드는 강결합된 코드보다 느슨한 결합이 되어있는 코드가 더 테스트하기 쉽기 때문에, 테스트코드를 작성하기 어렵다면, 좋은 코드가 아닐 가능성이 높다.
TDD
TDD(Test Driven Development)는 테스트 코드를 먼저 작성 한 뒤에, 그 테스트 코드를 통과하는 실제 코드를 나중에 만드는 기법을 의미한다. 주로 아래의 흐름으로 진행된다.
- 구현해야 할 내용을 정의한다. (Need)
- 실패하는 테스트를 작성한다. (Test)
- 테스트를 통과하는 코드를 작성한다. (Code)
- 코드를 리팩터링 한다. (Refactoring)
- 구현해야 할 내용을 모두 끝낼 때까지 위의 작업을 반복한다.
unittest
파이썬에서는 이런 테스트코드 개발을 위해서 unittest라는 라이브러리를 지원하고 있다. 공식문서는 아래의 페이지에서 참고하면 될 듯하다.
공식문서 : https://docs.python.org/ko/3/library/unittest.html
unittest의 기본 골격은 아래와 같다.
- main.py
import unittest
# 실제코드
def leap_year(year):
pass
# 테스트코드
class LeapYearTest(unittest.TestCase):
def test_leap_year(self):
pass
# 테스트를 진행
if __name__ == '__main__':
unittest.main()
unittest을 통해서 테스트코드를 작성할 때 주의할 점이 있는데 이는 아래와 같다.
- 테스트 코드는 이처럼 unittest의 TestCase라는 클래스를 상속하여 작성한다.
- 이 샘플 코드의 test_leap_year() 메서드처럼 test~로 시작하는 메서드는 자동으로 실행된다.
- unittest.TestCase에 있는 assertFalse(), assertTrue(), assertEquals()라는 세 개의 메서드를 이용하여 작성한다.
각각의 메서드는 다음과 같은 기능을 지니고 있다.
- assertTrue(a): a가 참인지 조사한다.
- assertFalse(a): a가 거짓인지를 조사한다.
- assertEqual(a, b): a와 b가 같은지를 조사한다.
다음은 윤년을 체크 테스트 코드를 작성한 예이다.
- main.py
import unittest
def leap_year(year):
def leap_year(year):
if year == 0:
return True
class LeapYearTest(unittest.TestCase):
def test_leap_year(self):
self.assertTrue(leap_year(0))
if __name__ == '__main__':
unittest.main()
test_leap_year() 함수에 self.assertTrue(leap_year(0))라는 문장을 추가했다. 이 테스트 코드는 0년은 윤년이어야 한다는 뜻인데 해당 코드를 돌려 보면 다음과 같은 결과가 나온다.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
성공적으로 테스트를 통과했음을 확인할 수 있다.
https://tech.inflab.com/20230404-test-code/
'Programing Language > Python' 카테고리의 다른 글
Poetry을 통한 의존성 관리하기 (0) | 2023.12.20 |
---|---|
문자열 모듈 String을 이용해서 문자열 모음 가져오기 (0) | 2023.11.24 |
requests, bs4, selenium4을 통해 웹 페이지 데이터 크롤링하기 (0) | 2023.11.24 |
코드 포맷터의 의미와 파이참에서 Black으로 코드 스타일 자동화 하기 (2) | 2023.11.23 |
pyautogui을 이용하여 자동화 기능 만들기 (1) | 2023.10.28 |