Two Scoops of Django | 단위 테스트 작성하기

Jihun Kim·2022년 5월 22일
0
post-thumbnail
post-custom-banner

이 글은 모범 사례로 배우는 Django 테크닉에 관한 명서 "Two Scoops of DJango"(대니얼 로이 그린펠드, 오드리 로이 그린펠드 저, 2016)를 읽고 요약 정리하여 작성한 것입니다. 이 책을 읽고 새로웠던 것, 기존에 잘 알지 못했던 것을 위주로 작성했습니다.




장고 프로젝트 테스팅에 유용한 라이브러리

coverage.py는 코드의 어떤 부분이 테스트 되었고, 어떤 라인들이 테스트 되지 않았는지 명확히 나타내 준다.


단위 테스트 작성하기

  • 각 테스트 메소드는 테스트를 한 가지씩 수행해야 한다.

  • 테스트는 같거나 비슷한 코드를 여러 번 반복해도 된다.
    - 오히려, 복사 붙여넣기를 반복하는 것이 더 선호 된다.

  • "Mock"을 이용해서 실제 데이터에 문제를 일으키지 않고 테스트할 수 있다.
    - 단위 테스트 중에는 외부 API에 대한 접속 혹은 이메일 수신, 웹훅을 비롯한 테스트 외적인 환경에 대한 액션이 취해져서는 안된다.
    - 만약 외부 환경에 대한 테스트가 필요하다면 단위 테스트를 통합 테스트로 변경 하거나 "Mock"을 이용해 외부 API에 대한 가짜 응답을 만드는 것(이를 "멍키 패치"라 한다)이 좋다.
    - 아래의 예시로 멍키 패치를 살펴 보자. mock 데코레이터를 이용하면 된다.

    <예시 1>

    	 import mock
         import unittest
    
         import icreamapi
    
         from flavors.exceptions import CantListFlavors
         from flavors.utils import list_flavors_sorted
    
         class TestIceCreamSorting(unittest.TestCase):
    
             # "icreamapi.get_flavors" 멍키패치 세팅
             @mock.patch.object(icreamapi, "get_flavors")
             def test_flavor를_정렬_할_수_있다(self, get_flavors):
                 get_flavors.return_value = ["a", "c", "b"]  # 정렬되지 않은 리스트 생성
    
                 flavors = list_flavors_sorted()
    
                 self.asssertEqual(
                       flavors,
                     ['a', 'b', 'c']
                 )
      

통합 테스트 하기

  • 단위 테스트가 끝난 후 행하는 것이 가장 이상적이다.
  • coverage.py를 이용해 테스트가 얼만큼 커버하는 지에 대한 정도를 퍼센트로 제공받을 수 있다.
    - 또한, 코드의 어떤 부분이 테스트 되었고 또 테스트 되지 않았는 지를 알 수 있다.

profile
쿄쿄
post-custom-banner

0개의 댓글