테스트는 코드 변경에 대한 자신감을 주고 리팩토링을 안전하게 합니다. 이 치트시트는 AAA 패턴, pytest/unittest 기본, fixture, mock의 최소 사용 원칙을 정리합니다.
언제 이 치트시트를 보나?
- 기능을 추가/수정했는데 “어디가 깨질지” 불안할 때
- 리팩토링을 안전하게 하고 싶을 때
핵심 패턴
- 테스트는 **AAA(Arrange-Act-Assert)**로 읽기 쉽게
- 가능하면 “순수 함수/의존성 분리”로 테스트하기 쉬운 구조 만들기
- mock은 마지막 수단(행동 검증이 필요할 때만 최소로)
최소 예제
1
2
3
4
5
6
7
8
9
10
| def add(a: int, b: int) -> int:
return a + b
def test_add():
# Arrange
a, b = 1, 2
# Act
out = add(a, b)
# Assert
assert out == 3
|
1
2
3
4
5
6
7
8
| import unittest
class TestAdd(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 2, 3)
if __name__ == "__main__":
unittest.main()
|
자주 하는 실수/주의점
- 테스트가 “구현 디테일”에 붙으면 리팩토링 때 같이 깨짐 → 결과/계약 중심으로
- 외부 의존(DB/네트워크)을 그대로 붙이면 느리고 flaky해짐 → 경계 분리/대체 전략 필요
- 테스트 이름/데이터를 읽기 좋게 만들면 유지보수가 쉬워짐
관련 링크(공식 문서)