Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

테스트 코드! 본문

Today I Learned

테스트 코드!

seaking110 2025. 2. 25. 21:04

테스트 준비

 

의존성 추가

dependencies {
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}
  • 하지만 Spring-boot-starter-test 라고 스프링부트에는 테스트가 기본적으로 존재
  • 따라서 의존성 추가 안해줘도 됨

 

H2 (Repository 테스트 or 통합 테스트)

  • 아무런 설정을 하지 않아도 H2 의존성을 추가해주면 테스트가 됨

 

 

Given-When-Then 패턴

  • Given: 테스트 실행을 위한 준비
  • When : 메서드나 기능을 실행하는 과정
  • Then : 실행 된 후 예상되는 결과가 나오는지 확인

 

테스트 Annotation 종류

  • @ExtendWith
    • 서비스 레이어를 테스트하는데 쓰이는 Annotation
    • component 역시 service와 동일하기 때문에 conponent에서도 테스트 가능
  • @WebMvcTest
    • 컨트롤러 단위 테스트
  • @DataJpaTest
    • JPA의 레파지토리 용 단위 테스트
    • JPA가 아니면 사용 불가
  • @SpringBootTest
    • 스프링 부트 전체를 테스트 수행
    • 통합 테스트

 

Mocking 

  • 의존 객체가 존재 할 때 가짜로 의존 객체를 만들어서 이용하는 것!
  • 사용 이유
    • 외부 의존성 제거
    • 테스트 범위 준수
    • 에러 상황 강제 발생

 

행위 검증

  • 테스트 시 특정한 행위를 하였는가? 를 확인
  • Mockito의 verify() 메서드를 통해 검증

상태 검증

  • 기능 수행 후 결과값이 기대값과 일치하는가? 를 확인

 

 

순서

  • 이론적으로는 Repository 부터 진행하는게 맞음!
  • 하지만 과거에 비해 Repository는 복잡한 로직이 잘 없기 때문에 우선순위에 밀릴 수 있다.
  • 특히 JPA 단순 save, findAll, findById 같은 메서드들은 라이브러리에서 검증이 끝났으므로 크게 의미 없다.

 

Alt + Insert 키로 빠르게 Test 만들기!

 

레파지토리 테스트

  • @Autowired 로 지정

서비스 테스트

  • @Mock : 테스트 대상 외의 의존 객체
  • @InjectMocks : 테스트 대상 객체

 

통합 테스트

  • @SpringBootTest 사용
  • @ActivieProfiles("local")로 application-local.properties를 만들어서 자신만 사용하자! 

 

'Today I Learned' 카테고리의 다른 글

프로젝트에 부족한 부분을 찾아 리팩토링  (0) 2025.02.27
Cookie, JWT  (0) 2025.02.26
N+1 문제 + 동시성 제어  (0) 2025.02.24
HttpMessageConverter란 무엇인가  (0) 2025.02.21
뉴스 피드 팀 프로젝트를 마치며  (0) 2025.02.20