django에서의 functional test와 unit test

TDD를 공부하다가

소프트웨어 테스팅에서의 용어와  라이브러리 용어가 헷갈릴 수 있어서 짤막하게 정리하였다.


Unit Test

단위 테스트

프로그램의 로직을 알고있고
프로그램의 내부에서 프로그래머가 테스팅 할 때 사용한다.


django에서 unittest를 수행할 때는 django.test.TestCase 모듈을 사용한다.

이 모듈은 python built-in module인 Unittest의 확장이다.


python manage.py test를 입력면
app들의 test 모듈을 돌면서 test.py에 명세된 테스트를 실행한다.



TDD에서

1. 프로그래머가 test하지 않아도 되는 대상들은 이미 테스팅 된 부분,
django core, 서드 파티 패키지중 테스트가 끝난 모듈이다.


2. 프로그래머가 test할 대상들은 '1번 외의 모든 것'이다.

django project의 경우
뷰, 모델, 폼부터
유효성 검사기
시그널,
필터,
템플릿 태그,
커스텀 utility module 등.





Functional Test

기능 테스트

프로그램의 외부에서
프로그래머가 아닌 사용자 입장에서 테스팅 할 때 사용한다.

기능 테스트  = UI 테스트 = GUI 테스트


django에서 기능 테스트(ft)를 수행할 때는

python built-in module Unittest와 selenium web driver를 조합하여 사용한다.





Mock & Fixture

Mock

외부 api를 이용하는 기능에 대한 단위 test가 필요할 때 두 가지 방식을 사용한다.

1, 단위 test 자체를 통합 test로 변경한다.
2. mock 라이브러리로부터 mock 객체를 생성하여 사용한다.
(python 3.3부터 unittest.mock으로 통합됨)

2의 경우 mock을 생성한다는 것은 외부 API에 대한 가짜 응답을 생성하는 행위이다.
가짜 응답을 생성함으로써,
django 뿐 아니라 다른 환경에서도 이용 가능한
시스템의 일부를 대체할 수 있는 객체로 테스트할 수 있다.

간편하게 monkey_patching을 할 수 있는 데코레이터 @unittest.mock.patch를 활용하여 구현한다.


Fixture

테스트에 필요한 데이터를 미리 정의해 둔 코드.

대부분 인증을 필요로 하는 웹 서비스의 경우
테스트를 위해서는 세션을 유지하는 기능이 필수적인데,
테스트 픽스처를 이용해서 로그인 처리를 건너 뛸 수 있다.
 

pytest의 fixture를 사용해보자.
pytest가 unittest보다 문법이 간결하고 fixture 기능을 지원한다.

TDD 사이클을 끝내고 나면 pytest도 함께 공부할 예정이다.







댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code 완주, 독후감

Blogger 커스터마이징 : CSS 수정 (sticky-header)