728x90
반응형
1. Pytest 설치
pip install pytest pytest-mock
2. 기본적인 테스트 작성
(1) 간단한 테스트
# test_sample.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(1, -1) == 0
테스트 실행:
pytest
(2) 예외 처리 테스트
import pytest
def divide(x, y):
if y == 0:
raise ValueError("Cannot divide by zero!")
return x / y
def test_divide():
with pytest.raises(ValueError, match="Cannot divide by zero!"):
divide(10, 0)
3. 테스트 클래스 사용하기
class TestMathOperations:
def test_addition(self):
assert 2 + 3 == 5
def test_multiplication(self):
assert 2 * 3 == 6
4. 파라미터화된 테스트
import pytest
@pytest.mark.parametrize("a, b, expected", [
(2, 3, 5),
(1, 2, 3),
(0, 0, 0),
])
def test_add(a, b, expected):
assert a + b == expected
5. 테스트 실행 방식
pytest -v # 상세 출력
pytest -q # 최소한의 출력
pytest --maxfail=2 # 최대 2개의 실패 후 중단
pytest -k "add" # "add"가 포함된 테스트만 실행
pytest test_sample.py # 특정 파일만 실행
6. 픽스처(Fixtures) 사용
import pytest
@pytest.fixture
def sample_data():
return {"name": "Alice", "age": 30}
def test_sample_data(sample_data):
assert sample_data["name"] == "Alice"
assert sample_data["age"] == 30
7. Mocking (의존성 제거)
(1) 기본적인 Mocking
from unittest.mock import MagicMock
def test_mock_example():
mock = MagicMock(return_value=10)
assert mock() == 10
(2) pytest-mock을 활용한 Mocking
pytest-mock을 활용하면 간편하게 특정 함수나 객체를 모킹할 수 있습니다.
예제: 특정 함수의 호출을 모킹하기
import pytest
def fetch_data():
return "Real Data"
def test_fetch_data(mocker):
mock_fetch = mocker.patch("__main__.fetch_data", return_value="Mocked Data")
assert fetch_data() == "Mocked Data"
mock_fetch.assert_called_once()
예제: 특정 객체의 메서드 모킹하기
class Database:
def get_user(self, user_id):
return {"id": user_id, "name": "Original User"}
def test_get_user(mocker):
db = Database()
mocker.patch.object(db, "get_user", return_value={"id": 1, "name": "Mocked User"})
assert db.get_user(1) == {"id": 1, "name": "Mocked User"}
pytest-mock을 활용하면 특정 기능을 테스트할 때 외부 의존성을 제거하고, 테스트의 정확성을 높일 수 있습니다.
728x90