이 글은 모범 사례로 배우는 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
를 이용해 테스트가 얼만큼 커버하는 지에 대한 정도를 퍼센트로 제공받을 수 있다.