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