일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- AWS
- can
- 프로그래밍
- 토플
- 블록체인
- backtest
- 파이썬
- it
- 자동차sw
- probability
- 퀀트
- 자동매매
- 토플 라이팅
- 아마존 웹 서비스
- python
- backtrader
- 백트레이더
- Cloud
- Bitcoin
- 백테스트
- 클라우드
- 암호화폐
- TOEFL
- 오토사
- 비트코인
- 개발자
- 확률
- AUTOSAR
- GeorgiaTech
- toefl writing
- Today
- Total
Leo's Garage
smtm #4 - 통합테스트 본문
unit test는 함수 단위로 코드 동작성을 검사하는 테스트이다.
통합 테스트는 여러개의 함수가 동작하는 묶음에 대한 동작 검증 테스트이다.
실제로 내가 일하고 있는 자동차 임베디드 SW 분야에서도 이와 같이 테스트를 진행한다.
실제 각 함수 단에 대한 unit test를 진행하고 나서 요구사항에 따른 특정 기능에 대한 동작 검증을 통합 테스트로 묶어서 진행하곤 한다.
smtm의 저자분도 이러한 점을 강조하면서 통합테스트의 중요성을 강조하고 있다.
자 저자분이 작성한 통합 테스트 코드를 살펴보자.
import unittest
from smtm import TddExercise
from unittest.mock import *
import requests
class TddExerciseIntegrationTests(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_initialize_correctly(self):
ex = TddExercise()
ex.set_period("2020-02-25T06:41:00Z", 60)
ex.initialize_from_server()
self.assertEqual(len(ex.data), 60)
self.assertEqual(ex.data[-1]["candle_date_time_utc"], "2020-02-25T05:41:00")
코드만 살펴보면, 이전에 작성한 unit test와 별반 다를게 없다.
이유는 통합 테스트는 실제 동작을 검증을 하는 것이기 때문에 unit test와 유사할 순 있다.
다만 unit test와 다르게 mock를 사용하지 않는데 이유는 실 사용환경과 동일한 조건으로 확인해야 하기 때문이다.
이렇게 실 사용환경과 동일하게 테스트를 진행하면 외부 요인에 의한 문제도 사전에 발견할 수 있다.
통합 테스트는 실제 사용할 기능 단위로 하면 좋다.
설계를 하면서 전체 SW를 각 기능 별로 모듈화해서 설계를 한다면, 해당 모듈 기준으로 통합 테스트를 진행해도 좋다.
좀 더 구체적으로 하고 싶다면 해당 모듈 내의 기능도 쪼개서 해도 괜찮다.
unit test의 경우에는 개발을 진행하면서 아주 빈번하게 호출하게 된다.
요구사항이 수정되었을 때, 코드를 변경하였을 때, 리펙토링 이후에 등등 다양하게 수행하는데 통합 테스트의 경우, 기능 기준으로 unit test가 충분히 완료되었을 때 실행해주면 된다.
개인적으로 어떤 방식이 unit test고 어떤게 통합 테스트다라고 명확히 말하긴 힘들다.
실제로 현업에서도 이를 어떤 기준으로 무 자르듯이 딱 잘라서 설명하진 않는다.
다만 기준은 unit 테스트는 아주 빈번히 개발하면서 수행하고, 통합 테스트는 이러한 unit들이 다 모여 만드는 특정 기능에 대한 테스트라는 것이다.
이 리뷰는 아래 책을 바탕으로 작성되었습니다.
http://www.yes24.com/Product/Goods/107635612