/ POSTS

[Spring] Spring Test 관련 키워드 간단 정리

Note : 이 글은 지극히 주관적인 생각을 토대로 작성된 글입니다. 혹시나 잘못된 부분이 있다면 메일 또는 코멘트를 통해 알려주시면 감사하겠습니다. 😄 제 메일은 About 탭에서 확인하실 수 있습니다. 📧

Intro..

이번 포스팅에서는 Spring에서 테스트 코드를 작성할 때 필요한 어노테이션과 프레임워크에 대해서 간단하게 정리하고자 한다. 처음에 Spring에서 테스트 코드를 작성하고자 할 때 어떻게 작성해야할지 몰랐던 부분이 많았는데, 나와 같은 사람이 많을 것이라 생각이 들어서 처음에 테스트 코드를 작성할 때 어떤 프레임워크와 어노테이션을 이용할 수 있는지에 대해서 작성해보고자 한다.

JUnit

  • Spring 프레임워크에서는 테스트 코드를 작성할 때, JUnit이라는 프레임워크를 많이 이용한다. 본인 또한 JUnit을 이용해서 Spring 프레임워크에서 필요한 테스트 코드를 작성하고 있다.

  • xUnit이라고 하는 단위 테스트 프레임워크의 자바 구현물이다.

  • 테스트 도구로서 외부 테스트 프로그램을(케이스)를 작성하여 System.out으로 일일이 출력하면서 디버깅 하지 않아도 되고 프로그램 테스트 시에 테스트에 걸린 시간 같은 것도 관리를 할 수 있게 해주는 도구이다.

  • 단 하나의 jar 파일로 되어 있으며 사용법 또한 간단하다.

  • 테스트 결과를 확인하는 것 이외 최적화된 코드를 유추해내는 기능도 하므로 성능 향상도 기대할 수 있으며 테스트 결과를 단순한 텍스트로 남기는 것이 아니라 Test 클래스로 남김으로써 개발자에게 테스트 방법 및 클래스의 히스토리를 넘겨줄 수 있다.

@RunWith

  • @RunWith 어노테이션을 사용함으로써, JUnit에 내장된 러너를 사용하는 대신 어노테이션에 정의된 러너 클래스를 사용한다.

  • JUnit 프레임워크의 테스트 실행 방법을 확장할 때 사용하는 어노테이션이다.

  • @RunWith를 사용하기 위해선 JUnit 실행에 필요한 SpringJUnit4ClassRunner 클래스를 상속받은 @RunWith(SpringRunner.class)를 꼭 붙여서 사용해야 한다.

  • @RunWith 어노테이션은 JUnit4에서 주로 사용하는 것으로 알고 있고, JUnit5의 경우에는 @ExtendWith를 사용하는 것으로 알고 있다.

@SpringBootTest

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

  • 여러 단위의 테스트를 하나의 통합된 테스트로 수행할 때 적합한 어노테이션이다.

  • 만능 테스트 어노테이션으로 하고 싶은 모든 테스트를 수행할 수 있다.

  • 단, 애플리케이션에 설정된 빈을 모두 로드하기 때문에 규모가 클 수록 느려지는 단점이 있다.

@WebMvcTest

  • MVC를 위한 테스트 어노테이션이다.

  • 웹에서 테스트하기 힘든 Controller를 테스트하는 데 적합하고 웹 상의 요청 또는 응답에 대해 테스트할 수 있다.

  • @WebMvcTest를 사용하면 MVC 관련 설정인 어노테이션만 불러오기 때문에 @SpringBootTest보다 가벼운 테스트가 가능하다.

@DataJpaTest

  • JPA 관련 테스트 설정만 로드하는 어노테이션이다.

  • 데이터 소스의 설정이 정상적인지 JPA를 사용하여 데이터를 제대로 CRUD 하는지 테스트가 가능하다.

  • @Entity 어노테이션을 스캔하여 Spring Data JPA 저장소를 구성한다.

  • 실제 데이터 베이스 공간을 사용하지 않고, 내장형 데이터 베이스 공간을 사용하여 테스트하기 때문에 JPA 테스트 이후 실제 데이터 베이스가 변경 되었는지 걱정할 필요가 없다.

@RestClientTest

  • REST 관련 테스트를 도와주는 어노테이션이다.

  • REST 통신의 데이터 형식으로 주로 사용되는 JSON 형식에 대해서 제대로 응답을 반환하는지 등을 테스트 한다.

@JsonTest

  • JSON 테스트를 지원하는 어노테이션이다.

  • @JsonTest 어노테이션은 JSON의 직렬화와 역직렬화를 수행하는 라이브러리인 GsonJackson API 테스트를 제공한다.

마치며

이번 포스팅에서는 Spring에서 테스트 코드를 작성하고자 할 때 필요한 프레임워크와 같이 사용하면 좋은 어노테이션에 대해서 간단하게 정리해 보았는데, 나는 이와 관련된 내용을 몰라서 처음에 고생을 했었던 것 같다. 물론 잘 정리된 글들도 많이 있었지만 그걸 보고도 자세하게 이해를 하지 못했었다. 최대한 간단하게 정리하려고 노력하였지만, 읽는 사람 입장에선 다른 블로그 글과 마찬가지로 이해되지 않는 부분이 있을 것 같다. 실제로 테스트 코드를 작성해가면서 각각의 차이점을 알아가다 보면 이해하는데 도움이 될 것이다. 이번 포스팅은 여기서 마무리하고 다음에 관련 내용 또는 다른 내용으로 새로운 포스팅을 작성해보겠다.