PYTHON · 테스트
통합 테스트
여러 컴포넌트의 상호작용을 검증하는 통합 테스트 패턴입니다.
테스트고급integration통합 테스트검증fixture
핵심 설명
여러 컴포넌트의 상호작용을 검증하는 통합 테스트 패턴입니다.
Python code
import pytest
# 테스트할 시스템
class UserRepository:
def __init__(self):
self._store = {}
self._next_id = 1
def save(self, data):
data["id"] = self._next_id
self._store[self._next_id] = data
self._next_id += 1
return data
def find(self, uid):
return self._store.get(uid)
class EmailService:
def __init__(self):
self.sent = []
def send(self, to, subject):
self.sent.append({"to": to, "subject": subject})
class UserService:
def __init__(self, repo, email):
self.repo = repo
self.email = email
def register(self, name, email):
user = self.repo.save({"name": name, "email": email})
self.email.send(email, f"환영합니다 {name}님!")
return user
# 통합 테스트 (실제 객체 사용)
@pytest.fixture
def user_system():
repo = UserRepository()
email = EmailService()
service = UserService(repo, email)
return {"service": service, "repo": repo, "email": email}
def test_registration_flow(user_system):
svc = user_system["service"]
user = svc.register("Alice", "alice@test.com")
# 저장 확인
saved = user_system["repo"].find(user["id"])
assert saved["name"] == "Alice"
# 이메일 발송 확인
emails = user_system["email"].sent
assert len(emails) == 1
assert emails[0]["to"] == "alice@test.com"
print("통합 테스트 통과!")
# 직접 실행
system = {"service": UserService(UserRepository(), EmailService()),
"repo": UserRepository(), "email": EmailService()}
system["service"] = UserService(system["repo"], system["email"])
test_registration_flow(system)학습 팁
통합 테스트는 단위 테스트보다 느리므로 CI에서 별도 스테이지로 분리하세요.
주의할 점
통합 테스트에서 외부 서비스(실제 DB, API)에 의존하면 불안정해집니다. 테스트용 인프라를 사용하세요.
자주 묻는 질문
통합 테스트란 무엇인가요?
여러 컴포넌트의 상호작용을 검증하는 통합 테스트 패턴입니다.
통합 테스트 학습 시 주의할 점은 무엇인가요?
통합 테스트에서 외부 서비스(실제 DB, API)에 의존하면 불안정해집니다. 테스트용 인프라를 사용하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.