PYTHON · 테스트
뮤테이션 테스트
뮤테이션 테스트로 테스트 스위트의 품질을 검증합니다. 코드를 의도적으로 변경하여 테스트가 실패하는지 확인합니다.
테스트고급mutation뮤테이션테스트 품질mutmut
핵심 설명
뮤테이션 테스트로 테스트 스위트의 품질을 검증합니다. 코드를 의도적으로 변경하여 테스트가 실패하는지 확인합니다.
Python code
import copy
import ast
# 간단한 뮤테이션 테스트 시뮬레이션
def is_adult(age: int) -> bool:
return age >= 18
def calculate_discount(price: float, rate: float) -> float:
if rate < 0 or rate > 1:
raise ValueError("할인율은 0~1 사이")
return price * (1 - rate)
# 테스트 스위트
def test_is_adult():
assert is_adult(18) == True
assert is_adult(17) == False
assert is_adult(0) == False
assert is_adult(100) == True
def test_discount():
assert calculate_discount(10000, 0.1) == 9000
assert calculate_discount(10000, 0) == 10000
# 뮤턴트 생성 및 테스트
mutations = [
("age >= 18 → age > 18", lambda age: age > 18),
("age >= 18 → age >= 19", lambda age: age >= 19),
("age >= 18 → age <= 18", lambda age: age <= 18),
("age >= 18 → True", lambda age: True),
]
print("=== 뮤테이션 테스트 ===")
killed = 0
for desc, mutant in mutations:
try:
assert mutant(18) == True
assert mutant(17) == False
assert mutant(0) == False
print(f" ☠️ 살아남음: {desc}") # 테스트 부족!
except AssertionError:
killed += 1
print(f" ✅ 잡힘: {desc}")
total = len(mutations)
score = killed / total * 100
print(f"\n뮤테이션 점수: {killed}/{total} ({score:.0f}%)")
# 실제 사용: pip install mutmut
# mutmut run --paths-to-mutate=src/학습 팁
뮤테이션 점수가 높을수록 테스트 스위트가 코드 변경을 잘 감지합니다. 80% 이상을 목표로 하세요.
주의할 점
뮤테이션 테스트는 시간이 오래 걸립니다. CI에서는 변경된 파일에 대해서만 실행하세요.
자주 묻는 질문
뮤테이션 테스트란 무엇인가요?
뮤테이션 테스트로 테스트 스위트의 품질을 검증합니다. 코드를 의도적으로 변경하여 테스트가 실패하는지 확인합니다.
뮤테이션 테스트 학습 시 주의할 점은 무엇인가요?
뮤테이션 테스트는 시간이 오래 걸립니다. CI에서는 변경된 파일에 대해서만 실행하세요.