본문 바로가기
개발공부/JAVA Spring

[Spring Boot] 테스트 코드 작성 관련 정리

by bzerome240 2023. 3. 3.

 

테스트 코드를 작성하는 이유

  • 개발 과정에서 문제를 미리 발견할 수 있다.
  • 리팩토링의 리스크가 줄어든다.
  • 애플리케이션을 가동해서 직접 테스트하는것보다 빠르게 진행할 수 있다.
  • 하나의 명세 문서로서의 기능을 수행한다.
  • 몇가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드를 생산할 수 있다.

 


 

단위 테스트

개별 모듈을 독립적으로 테스트하는 방식

테스트 피드백을 빠르게 받을 수 있다.

 

통합 테스트

다양한 모듈을 결합해 전체적인 로직이 의도한 대로 동작하는지 테스트하는 방식

외부 요인들을 포함하여 애플리케이션이 온전히 동작하는지 테스트한다.

단점 : 테스트 비용이 커진다.

 


 

Given-When-Then 패턴

Given

테스트에 필요한 변수를 정의하거나 Mock 객체를 통해 특정 상황에 대한 행동을 정의

When

실제 테스트 코드 포함, 테스트를 통한 결과값을 가져온다.

Then

결과값을 검증하는 작업 수행

 


 

좋은 테스트를 작성하는 5가지 규칙  F I R S T

  • Fast 빠르고
  • Isolated 독립적으로
  • Repeatable 반복 가능하게
  • Self-validating 테스트가 성공했는지 실패했는지 확인할 수 있는 코드를 작성한다.
  • Timely 애플리케이션 코드를 구현하기 전에 완성한다.

 

Junit

단위 테스트를 위한 도구를 제공한다. 통합 테스트도 제공한다.

가장 큰 특징은 어노테이션 기반 테스트 방식을 지원한다는 것

 

Junit의 생명주기

  • @Test : 테스트 코드를 포함한 메서드 정의
  • @BeforeAll : 테스트 시작 전 호출되는 메서드 정의
  • @BeforeEach : 각 테스트 메서드가 실행되기 전에 동작하는 메서드 정의
  • @AfterAll : 테스트를 종료하면서 호출되는 메서드 정의
  • @AfterEach : 각 테스트 메서드가 종료되면서 호출되는 메서드 정의

 


 

관련 어노테이션

 

@WebMvcTest(테스트대상클래스.class)

@SprinigBootTest 보다 가볍게 테스트하기 위해 사용된다.

= 슬라이스 테스트 : 단위 테스트와 통합 테스트의 중간 개념

 

@MockBean

Mock(가짜) 객체를 생성해서 주입하는 역할을 수행한다.

 

@Test

테스트 코드가 포함됐다고 선언하는 어노테이션

 

@DisplayName

테스트 메서드의 이름이 복잡해서 가독성이 떨어질 경우 테스트에 대한 표현을 정의할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글