본문 바로가기
프로그래밍/Python

[TDD][Python] unittest - 예제로 익혀보기(1)

by 우주를놀라게하자 2022. 3. 16.
반응형
SMALL

저번 시간엔 기초적인 어휘들과 구성요소(?)들에 대해서 익혀보았다. 이번시간에 어떻게 활용할 것인지에 대해서 직접 코드로 짜보면서 이해해보자!

나는 간단하게 날짜를 검사해주는 예제를 만들어보았다 아래 코드를 참고해보자

주석도 달아놨으니 크게 어려움은 없을것이다.😀

📃 소스코드 및 설명(datetimehelper.py)

"""
날짜 계산 모듈
"""

import datetime

class DateTimeHelper(object):
    """
    기존의 datetime이 주는 형식(2022-03-16 12:36:53.954430)에서 편의성을 위해
    날짜, 요일로 분리해주는 모듈입니다.
    """
    def today(self):
        """
        오늘 날짜를 반환합니다.
        @returns
            2022-03-16 12:36:53.954430
        """
        
        return datetime.datetime.now()

    def date(self):
        """
        오늘 날짜를 반환합니다. 다만, today함수의 형식과 다른 일/월/년도 형식으로 반환합니다
        @returns
            16/03/22
        """
        return self.today().strftime("%d/%m/%Y")

    def weekday(self):
        """
        오늘 요일을 반환합니다. 
        @returns
            Wednesday
        """
        return self.today().strftime("%A")

    def us_to_korea(self,date):
        """
        미국식 날짜(16/03/22) -> 한국식(2022/03/16) 날짜로 변경합니다.
        @params
            date - 08/12/2016
        @returns
            2022/03/16
        """
        dd, mm, yy = date.split('/')
        date_obj = datetime.date(year=int(yy), month=int(mm), day=int(dd))
        return date_obj.strftime("%Y/%m/%d")

나는 위와 같이 간단하게 내 입맛대로 날짜를 바꿔주는 클래스를 하나 생성해 보았다. 이제 모듈은 완성되었으니, 잘 작동하는지 테스터를 만들어서 확인할 일만 남았다!!😎

📃 소스코드 및 설명(test_datetimehelper.py)

"""
datetimehelper 모듈 테스터
"""
import unittest
import datetimehelper
class DateTimeHelperTestCase(unittest.TestCase):
    """
    Unit Test - testcase class [DateTimeHelper 클래스]
    """
    def setUp(self) -> None:
        self.obj = datetimehelper.DateTimeHelper()

    
    def test_us_korea_conversion(self):
        """
        미국식 날짜 -> 한국식 날짜 변경 테스트
        """
        # 테스트 케이스 생성
        d1 = '08/12/2016'
        d2 = '24/11/2021'
        d3 = '02/02/2019'
        d4 = '16/03/2021'
        
        # 변수 d1에 있는 데이터를 넣었을때 '2016/12/18'의 값이 나와야 통과된다는 뜻이다.
        self.assertEqual(self.obj.us_to_korea(d1), '2016/12/08')
        self.assertEqual(self.obj.us_to_korea(d2), '2021/11/24')
        self.assertEqual(self.obj.us_to_korea(d3), '2019/02/02')
        self.assertEqual(self.obj.us_to_korea(d4), '2021/03/16')

# 중요한 부분은 이 포인트다
# unittest.main()만 불러주면 코드 내부에서 함수이름 앞에 'test'로 명시되어 있는 부분을
# 자동으로 테스트 케이스로 인지하고 실행한다.
if __name__ == '__main__':
    unittest.main()

다음은 결과 화면이다. 아래 . 이 보이는데 점 하나가 의미하는바는 테스트 케이스의 갯수다. 만약 테스트 케이스가 여러개라면 그 갯수에 맞게 통과되면 . 이 찍히고 오류가 된다면 F를 보여준다.

 

일단 결과에서 알 수 있듯 간단한 테스트 케이스는 통과된다😁

다음글에선 이 프로젝트를 한번더 확장하는 시간을 갖겠다🤑

반응형
LIST