본문 바로가기
Tech/Spring

SpringBoot Test 기본 개념 정리

반응형

표현방식

Given-When-Then
준비-실행-검증의 부분으로 나눠진 테스트 코드로 표현한다


@SpringBootTest

  1. 정의
    통합 테스트를 제공하는 기본적인 스프링부트 테스트 어노테이션

  1. 의존성
    • JUnit
    • Spring & SpringBoot test
    • AssertJ
    • Hamcrest
    • Mockito( Java Mocking framework )
    • JSONassert
    • JsonPath

  1. Values

    • properties
      테스트시 property를 주입할 수 있다. ( key = value 방식으로 )


    • classes
      어플리케이션 컨텍스트에 로드할 클래스를 지정한다
      따로 지정하지 않으면 @SpringBootConfiguration을 찾아 로드한다


    • webEnviroment
      어플리케이션이 실행될때의 웹환경을 설정할 수 있다


@RunWith

JUnit에 내장된 러너를 사용하는 대신 어노테이션에 정의된 러너 클래스를 사용
@SpringBootTest 어노테이션을 사용하려면
JUnit의 SpringJUnit4ClassRunner 클래스를 상속받는 @RunWith(SpringRunner.class)를 꼭 붙여야한다


@ActiveProfile("")

프로파일 환경을 갖는다면, 해당 어노테이션 Value에 원하는 프로파일 환경값을 부여 가능하다


@WebMvcTest

  • MVC를 위한 테스트, 웹에서 테스트하기 힘든 컨트롤러를 테스트하는데 적합하다.
  • 시큐리티 혹은 필터까지 자동으로 테스트하며 수동으로 추가/삭제 가능

@DataJpaTest

  • JPA 관련된 설정만 로드
  • 인메모리 데이터베이스를 이용

@RestClientTest

  • REST 관련 테스트를 도와주는 어노테이션
  • REST 통신의 JSON 형식이 예상대로 응답을 반환하는지 등을 테스트

@JsonTest

JSON의 직렬화, 역직렬화를 수행하는 Json, Jackson의 테스트 제공


통합 테스트 환경 제공하기

@RunWith
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles
@Transactional // Test환경의 트랜잭션은 기본적으로 롤백
@Ignore // 자식클래스에서 상속시켜 동작시킬것이므로 Ignore
class IntegrationTest{
    ...
}

추가 내용

  • 이번 포스트 내용은 사용법에 관한 것이 였지만, 테스트를 잘하기 위해서는 TDD 개발이론을 습득 해야 할 것 같다.
  • 테스트를 잘하기 위해서는 클래스, 메서드등 기본 단위들이 각자의 관심사에 맞게 잘 나눠져 있어야 한다.

    단일 책임 원칙
  • 테스트하기 쉬운 코드가 잘짜여진 코드이다. ( 유지보수에 용이하다 )
728x90
반응형