7. 정리
- 테스트는 회귀 안전망·설계 피드백·실행 가능한 명세를 줍니다. "main 으로 찍어 보기" 는 이 중 하나도 못 줍니다.
- 단위 테스트는 의존을 가짜로 바꿔 빠르고 격리되게, 통합 테스트는 진짜 DB·SQL 로 핵심 경로만 확인합니다.
- 테스트 가능한 설계의 핵심은 저장소·결제·시계 같은 의존을 생성자로 주입하는 것입니다.
new와now()를 메서드 안에서 직접 부르면 테스트가 막힙니다. - 더미·스텁·페이크·목을 구분해서 쓰면, 손으로 쓴 테스트 더블도 Mockito 없이 충분히 유지보수됩니다.
Clock.fixed·Clock.offset으로 "24시간 경과" 같은 시간 조건을 몇 밀리초에 재현할 수 있습니다.- H2 는 트랜잭션을 열고 테스트마다 롤백해 순서와 무관하게 항상 같은 초기 상태에서 시작합니다.
- 콘솔 런처 jar 하나로 Gradle 없이도 폐쇄망에서 JUnit 5 를 그대로 돌릴 수 있습니다.
- 이 레슨의 손으로 쓴 페이크·스텁은 Mockito, H2 통합 테스트는
@MybatisTest/@JdbcTest로 그대로 이어집니다. 진짜 PostgreSQL·Oracle 컨테이너로 검증하려면 Testcontainers 가 표준이지만, 폐쇄망에서는 Docker 이미지를 미리 반입해야 쓸 수 있습니다.