Spring
Spring Boot 테스트 설정하기
Arthur Kim
2021. 5. 12. 16:12
pom.xml에 테스트 디펜던시 라이브러리 추가하기
- junit4: java 유닛 테스트 라이브러리
- Mockito: Mock객체를 생성하기위한 라이브러리
<!-- ================================================================ -->
<!-- Junit4 -->
<!-- ================================================================ -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- ================================================================ -->
<!-- Mockito -->
<!-- ================================================================ -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.8.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>3.9.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
어노테이션
@RunWith
- 스프링 부트에 속한 어노테이션(@Autowired, @Component, ...등)을 사용할 수 있도록 해주는 어노테이션.
@RunWith(SpringRunner.class)
@SpringBootTest
- 스프링 부트를 실행시켜 테스트를 진행시키도록 해주는 어노테이션.
@SpringBootTest(classes = Application.class)
package 하위에 있는 파일들을 스캔해서 모든 외부 configuration들의 위치를 읽고 자동으로 configuration을 설정하여 스프링 어플리케이션을 실행시켜 줍니다.
기존에 설정된 configuration을 변경하지 않고 테스트 가능한 biz 테스트에 적합합니다.
@ContextConfiguration
- 스프링 통합 테스트에 필요한 ApplicationContext를 로드시켜주는 어노테이션
@ContextConfiguration( classes = Application.class )
SpringBootTest와 다르게 지정한 class를 기준으로 confiration을 설정하고 스프링 어플리케이션을 실행시켜주게 합니다. controller테스트 ( MVC 테스트 )와 같이 HTTP 요청/응답을 모킹해야하는 경우에 사용하기 적합합니다.
@WebMvcTest
- 스프링 MVC 테스트를 위한 어노테이션. HTTP 요청/응답을 모킹할 수있게 도와줍니다.
@WebMvcTest( controllers = ApprovalPathController.class)
@Mock
@MockBean
@InjectMocks
@Spy
Biz 테스트 세팅하기
1. 어노테이션 세팅
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class JoinUsBizTest {
2. 테스트할 biz에서 사용한 객체 모킹하기
@Mock
private UserBiz userBiz;
@Mock
private PrivacyPolicyConsentBiz privacyPolicyConsentBiz;
@Mock
private UserGrpRscGrpRelBiz userGrpRscGrpRelBiz;
@Mock
private MailValidationBiz mailValidationBiz;
3. biz에 모킹한 객체 주입 및 스파이 설정하기
@InjectMocks
@Spy
private JoinUsBiz joinUsBiz;
Controller 테스트 세팅하기
1. 어노테이션 세팅
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = ApprovalPathController.class)
@ContextConfiguration( classes = Application.class )
public class ApprovalPathControllerTest {
2. 테스트할 biz에서 사용한 객체 모킹하기
@MockBean
private IApprovalPathBiz approvalPathBiz;
@MockBean
private CustomInterceptor customInterceptor;
3. controller에 모킹한 객체 주입하기
@InjectMocks
private ApprovalPathController approvalPathController;
4. MockMvc 설정하기
private MockMvc mvc;
@Before
public void setup() throws Exception {
MockitoAnnotations.openMocks(this);
mvc = MockMvcBuilders
.standaloneSetup(approvalPathController)
.addInterceptors(customInterceptor).build();
when(customInterceptor.preHandle(any(), any(), any())).thenReturn(true);
}
- CustomInterceptor를 거치게 되면, 세션이 없어 컨트롤러 진입이 막히지만, 모킹한 customIntercepter를 삽입하여 컨트롤러에 진입가능하도록 변경합니다.