관리 메뉴

Leo's Garage

smtm #4 - 통합테스트 본문

카테고리 없음

smtm #4 - 통합테스트

LeoBehindK 2023. 1. 15. 14:08
728x90
반응형

 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

 

암호화폐 자동매매 시스템 만들기 with 파이썬 - YES24

이 책은 암호화폐 자동거래 프로그램의 설계부터 개발 후 활용까지 모든 과정을 다루고 있다. 파이썬의 기본적인 문법부터 설명하고 있지만 대부분은 실제 코드를 개발하는 과정과 함께 파이썬

www.yes24.com

 

728x90
반응형
Comments