Skip to main content Link Search Menu Expand Document (external link) Copy Copied

JUnit5

3개의 주요 모듈로 구성된다.

  • Jupiter: TestEngine의 구현체로서, 작성한 테스트 코드를 발견하고 실행하는 역할을 한다.
  • Vintage: TestEngine의 구현체로, JUnit 3, 4를 지원한다.
  • Platform: TestEngine 인터페이스를 제공하며, IDE 연동을 보조하는 역할도 수행한다.

JUnit5 LifeCycle Annotation

Annotation Description
@Test 테스트 메소드를 나타낸다.
@BeforeEach 테스트 메소드 시작 전에 실행되어야 하는 메소드
@AfterEach 테스트 메소드 종료 후 실행되어야 하는 메소드
@BeforeAll 모든 테스트 시작 전에 한 번만 실행되는 메소드
@AfterAll 모든 테스트 종료 후에 한 번만 실행되는 메소드

JUnit5 Main Annotation

@SpringBootTest

통합 테스트용으로 사용한다. SpringBootApplication을 찾아 하위의 모든 Bean을 스캔하여 로드하며, 이 후 테스트용 Application Context를 만들어 MockBean을 추가하고 교체한다.


@ExtendWith

JUnit4의 @RunWith의 역할을 대신하는 어노테이션으로, 실행할 메인 클래스를 지정할 수 있다. @SpringBootTest에 기본적으로 포함된다.


@WebMvcTest(Class.class)

특정 컨트롤러 클래스만 로드하여 테스트한다. 지정하지 않으면 Controller와 관련된 모든 Bean이 로드된다. 컨트롤러만 테스트할 경우 @SpringBootTest 대신 사용한다.


@Autowired

  • MockMvc 객체를 주입받아 Controller의 API를 테스트하는 용도로 사용된다.
  • perform() 메소드를 사용하여 컨트롤러의 동작을 확인하며, andExpect(), andDo(), andReturn() 등을 활용할 수 있다.

@MockBean

  • 실제 동작하지 않는 가짜 객체를 생성한다.
  • given() 메소드로 가짜 객체의 동작을 정의할 수 있으며, verify()로 메소드 실행 여부를 확인할 수 있다.

@AutoConfigureMockMvc

spring.test.mockmvc 설정을 로드하여 MockMvc의 의존성을 자동 주입한다. MockMvc는 Rest API 테스트를 지원하는 클래스이다.


@Import

필요한 클래스를 Configuration으로 등록하여 사용할 수 있다.


테스트

통합 테스트

애플리케이션의 전체 비즈니스 로직이 올바르게 동작하는지 확인한다. 대규모 프로젝트에서는 모든 Bean을 스캔하고 로드하는 작업이 반복되어 테스트 실행 시 무거운 작업이 될 수 있다.


단위 테스트

각 기능을 개별적으로 독립적으로 테스트한다.


F.I.R.S.T 원칙

테스트 설계 시 고려할 5가지 원칙이다.

  • Fast: 테스트는 빠르게 진행되어야 한다.
  • Independent: 각 테스트는 독립적이어야 한다.
  • Repeatable: 같은 결과를 반복적으로 만들어야 한다.
  • Self-Validating: 테스트 자체로 결과를 확인할 수 있어야 한다.
  • Timely: 비즈니스 코드가 완성되기 전에 테스트가 준비되어야 한다.