홈 › 실무 확장 › 12 / 22

테스트 실무

JUnit 5 단위·통합 테스트, 테스트 더블, 시계 제어, H2 롤백
섹션 7진행 0 / 22

테스트 실무 — JUnit 5 단위·통합 테스트, 테스트 더블, 시계 제어, H2 롤백

주문 서비스 하나를 놓고 "DB·결제·시계 없이 도는 단위 테스트" 와 "진짜 SQL 이 H2 에서 도는 통합 테스트" 를 나눠 쓰며, 테스트 가능한 설계와 JUnit 5 의 실전 기능을 익힙니다.

1. 왜 배우는가

Spring Boot + MyBatis 사내 시스템을 만드는 실무자 중에는 테스트를 거의 안 써 본 사람이 많습니다. 대신 "DB 붙여서 main 으로 찍어 보고 눈으로 확인" 하는 방식으로 개발합니다. 이 방식은 사람이 매번 눈으로 봐야 하고, 코드가 바뀌면 다시 찍어 봐야 하고, 무엇을 확인했는지 다음 사람이 알 수 없습니다.

이 레슨은 주문 서비스 하나를 예제로 단위 테스트 와 통합 테스트 를 나눠 씁니다. 단위 테스트는 DB·결제·시계를 전부 가짜로 바꿔 0.1초 안에 끝나고, 통합 테스트는 H2 메모리 DB 에 진짜 SQL 을 던집니다. 두 종류를 섞지 않는 이유와 나누는 기준을 코드로 봅니다.

폐쇄망 환경에서는 Gradle 로 의존성을 받는 절차가 번거롭습니다. 이 레슨은 junit-platform-console-standalone jar 하나만 반입해 Gradle 없이 JUnit 5 를 돌리는 방법도 함께 다룹니다.

배울 내용은 테스트 가능한 설계, 테스트 더블(더미·스텁·페이크·목), AAA 패턴과 경계값, Clock 으로 시간 제어, H2 트랜잭션 롤백 격리, 콘솔 런처 실행 여섯 가지입니다.

코드는 java-src/extension/12_testing 에 있고 Order·OrderRepository·PaymentGateway·OrderService·JdbcOrderRepository·OrderServiceTest·JdbcOrderRepositoryTest·Main 여덜 파일로 구성됩니다.

이 레슨은 앞선 레슨의 재료를 그대로 재사용합니다. H2 SQL 은 06 레슨, HttpServer 라우터는 07 레슨, Clock 개념은 09 레슨의 스케줄링과 이어집니다.