JUnit

qkrrnjswo·2023년 5월 24일
0

공부 정리

목록 보기
5/24

테스트 코드 작성 목적

  • 코드의 안정성을 높일 수 있음
  • 기능을 추가하는 과정에서 발생하는 side-effect를 최소화
  • 해당 코드가 작성된 목적을 명확하게 이해 가능

JUnit이란?

  • java의 대표적인 Test Framework

  • 단위 테스트를 위한 도구를 제공
    단위테스트? 모든 함수와 메소드에 대한 각각의 테스트 케이스를 작성하는 것

  • 어노테이션 가반으로 테스트를 지원

  • Spring Boot2.2부터는 JUnit5를 지원

  • JUnit5 = Jupiter, Platform, Vintage 모듈로 구성

1. Jupiter

  • TestEngine API의 구현체로 JUnit5를 구현하고 있다.
  • 테스트의 실제 구현체는 별도 모듈 역할을 수행 하는데 그 모듈 중 하나가 Jupiter-Engine이다.
  • Jupiter-Engine는 Jupiter API를 사용하여 작성한 테스트 코드를 발견하고 실행하는 역할을 수행, 개발자가 테스트 코드를 작성할 때 사용된다.

2. Platform

  • Test를 실행하기 위한 뼈대
  • TestEngine 인터페이스를 가지고 있음
  • TestEngine을 통해 Test를 발견하고, 수행결과를 보고함
    (Platform = TestEngine API+ Console Launcher + JUnit 4 Based Runner)

3. Vintage

  • TestEngine API의 구현체로 JUnit 3, 4를 구현하고 있다.
  • 기존 JUnit 3, 4 버전으로 작성된 테스트코드를 실행할 때 사용. Vintage-Engine을 포함하고 있다.

JUnit LifeCycle Annotation

  • JUnit 5의 테스트 라이프 사이클 어노테이션

JUnit Main Annotation

  • @SpringBootTest

    • 통합 테스트 용도
    • @SpringBootApplication을 찾아가 하위 모든 빈을 스캔, 로드
    • 로드후 Test용 Application Context를 만들어 Bean을 추가, MockBean이 있으면 MockBean을 넣음.
  • @ExtendWith

    • JUnit4의 @RunWith가 @ExtendWith 로 변경
    • 메인으로 실행될 Class를 지정할 수 있음
    • @SpringBootTest는 기본적으로 @ExtendWith가 추가 되어 있음
  • @WebMvcTest(ClassName.class)

    • 해당 클래스만 실제로 로드하여 테스트를 진행
    • 매개변수를 지정해 주지 않으면 @Controller, @RestController, @RestControllerAdvice 등 컨트롤러와 연관된 Bean을 모두 로드
    • Spring의 모든 Bean을 로드하는 @SpringBootTest 대신 컨트롤러 관련 코드만 테스트할 경우 사용
  • @Autowired about MockBean

    • MockMvc객체를 주입받음
    • perform() 메소드를 활용하여 컨트롤러의 동작을 확인할 수 있음
      .andExpect(), andDo(), andReturn() 메소드를 같이 활용함
  • @MockBean

    • 의존성이 잡혀있는 객체의 가짜 객체를 생성해주는 어노테이션
      가짜 객체는 실제 행위를 하지 않음
    • given()을 활용하여 가짜 객체의 동작에 대해 정의
  • @AutoConfigureMockMvc

    • spring.test.mockmvc의 설정을 로드하면서 MocMvc의 의존성을 자동으로 주입
    • MockMvc 클래스는 REST API 테스트를 할 수 있는 클래스
  • @Import
    • 필요한 Class들을 Configuration으로 만들어 사용 가능
    • Configuration Component 클래스도 의존성 설정할 수 있음
    • import된 클래스는 주입으로 사용 가능

통합테스트

  • 여러기능을 조합하여 전체 비지니스 로직을 확인
  • 모든 빈을 스캔하고 로드하는 작업이 반복되어 매번 무거운 작업을 수행해야 함

단위 테스트

  • 프로젝트에 필요한 모든 기능에 대해 각각 테스트를 진행

First 원칙

  • Fast: 테스트 코드의 실행은 빠르게 진행되어야 함.
  • Independent: 독립적인 테스트가 가능해야 한다.
  • Repeatable: 매번 같은 결과를 만들어야 한다.
  • Self-Validating: 테스트는 그자체로 실행, 결과 확인 가능
  • Timely: 단위 테스트는 비지니스 코드가 완성되기 전에 구성하고 테스트가 가능해야 함(TDD의 경우)

참고

https://www.youtube.com/watch?v=SFVWo0Z5Ppo&ab_channel=%EC%96%B4%EB%9D%BC%EC%9A%B4%EB%93%9C%ED%97%88%EB%B8%8C%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4-AroundHubStudio

0개의 댓글