테스트 기초
학습 목표
pytest로 테스트를 작성하고 실행할 수 있다fixture로 테스트 데이터와 환경을 관리할 수 있다parametrize로 여러 입력에 대한 테스트를 효율적으로 작성할 수 있다- ML 코드에 적합한 테스트 전략을 적용할 수 있다
왜 중요한가
ML/DL 코드에서 “학습이 안 되는” 원인은 데이터 전처리 버그, 손실 함수 오류, 차원 불일치 등 다양합니다. 자동화된 테스트는 코드 변경 시 기존 기능이 깨지지 않았음을 보장하고, 리팩토링을 안전하게 해줍니다.pytest는 Python에서 가장 널리 사용되는 테스트 프레임워크입니다.
pytest 기본
Fixture - 테스트 환경 관리
Fixture 스코프
| 스코프 | 설명 | 사용 예시 |
|---|---|---|
function | 매 테스트마다 생성 (기본값) | 독립적인 테스트 데이터 |
class | 클래스당 한 번 | 클래스 내 공유 데이터 |
module | 모듈당 한 번 | 파일 수준 공유 리소스 |
session | 전체 세션에서 한 번 | 데이터베이스 연결, 모델 로딩 |
Parametrize - 다중 입력 테스트
마킹과 필터링
conftest.py - 공유 설정
AI/ML에서의 활용
pyproject.toml 테스트 설정
unittest와 pytest의 차이는 무엇인가요?
unittest와 pytest의 차이는 무엇인가요?
unittest는 표준 라이브러리에 포함되어 있지만 클래스 기반이고 코드가 장황합니다. pytest는 간단한 함수와 assert만으로 테스트를 작성할 수 있고, fixture, parametrize, 풍부한 플러그인 생태계를 제공합니다. 새 프로젝트에서는 pytest를 권장합니다.ML 코드에서 무엇을 테스트해야 하나요?
ML 코드에서 무엇을 테스트해야 하나요?
- 데이터 전처리 (정규화, 인코딩, 분할), 2) 모델 입출력 형상 (shape 확인), 3) 손실 함수 (알려진 입력에 대한 출력), 4) 데이터 누수 (학습/검증 분리), 5) 재현성 (시드 고정 시 동일 결과). 전체 학습 테스트는 비용이 크므로 별도 마킹하여 관리합니다.
체크리스트
-
pytest로 테스트 파일을 작성하고 실행할 수 있다 -
assert와pytest.approx로 결과를 검증할 수 있다 -
fixture로 테스트 데이터와 리소스를 관리할 수 있다 -
parametrize로 여러 입력에 대한 테스트를 작성할 수 있다 - ML 코드에서 전처리, 차원, 손실 함수를 테스트할 수 있다

