pytest는 Python의 단위 테스트 및 통합 테스트를 작성하기 위한 인기 있는 라이브러리입니다. 다양한 기능을 제공하며, 그 중 가장 중요한 기능은 테스트를 자동으로 발견하고 실행하며, 테스트 결과를 쉽게 보고할 수 있는 기능입니다.
mock은 테스트 코드에서 외부 종속성(예: 데이터베이스, API 호출, 파일 시스템 등)을 가짜 객체로 대체하는 라이브러리입니다. unittest.mock 모듈이 Python 3.3 이상에 내장되어 있으며, pytest와 함께 사용할 수 있습니다.
# calculator.py
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
이제 이 클래스를 테스트하는 pytest 코드를 작성해 보겠습니다.
# test_calculator.py
from calculator import Calculator
def test_add():
calc = Calculator()
result = calc.add(2, 3)
assert result == 5 # 기대값 5와 실제값 result 비교
def test_subtract():
calc = Calculator()
result = calc.subtract(5, 3)
assert result == 2 # 기대값 2와 실제값 result 비교
위 코드를 pytest로 실행하면 test_add와 test_subtract 함수가 자동으로 테스트되고, 테스트 결과가 출력됩니다.
# external_api.py
import requests
def fetch_data(url):
response = requests.get(url)
return response.json() # JSON 응답을 반환한다고 가정
이제 fetch_data 함수의 requests.get 호출을 mock 처리하여 테스트할 수 있습니다.
# test_external_api.py
from external_api import fetch_data
import pytest
from unittest import mock
def test_fetch_data():
# mock 객체를 만들어서 requests.get을 대체
mock_response = mock.Mock()
mock_response.json.return_value = {"key": "value"}
with mock.patch('requests.get', return_value=mock_response):
result = fetch_data("http://example.com")
# mock 응답 데이터가 반환되는지 확인
assert result == {"key": "value"}
위의 코드를 테스트하려면 터미널에서 pytest 명령어를 사용하여 실행합니다.
pytest test_calculator.py
pytest test_external_api.py
이렇게 pytest와 mock을 활용하여 효율적이고 신뢰성 있는 테스트를 작성할 수 있습니다.