로그인 기능을 구현하기위해 단위테스트를 하려다보니
HttpSession 객체를 활용한 테스트가 필요했습니다.
방법을 모색해보니 바로 !! Mock
Mock이란
실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법입니다.
출처: https://www.crocus.co.kr/1555 [Crocus]
MockHttpSession 을 사용했습니다.
MockHttpSession 을 사용한 테스트 코드
package com.flab.doorrush.domain.user;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import com.flab.doorrush.domain.user.api.UserController;
import com.flab.doorrush.domain.user.dao.UserMapper;
import com.flab.doorrush.domain.user.dto.UserDto;
import org.junit.After;
import org.junit.Before;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockHttpSession;
@SpringBootTest
public class LoginTest {
@Autowired
UserController userController;
protected MockHttpSession session;
@Before
//@Test가 붙은 테스트 메서드가 실행되기 전에 먼저 @Before가 붙은 메서드가 실행되도록 하는 어노테이션
public void setUp(){
session = new MockHttpSession();
session.setAttribute("login","yes");
}
@After
//@Test가 붙은 테스트 메서드가 실행된 후에 @After가 붙은 메서드가 실행되도록 하는 어노테이션
public void clean(){
session.clearAttributes();
}
@Test
public void UserControllerTest(){
userController.login("testID","testPW",session);
if(session!=null){
assertThat("yes",is(session.getAttribute("login")));
}
}
}
@Test 메서드 실행 전후로 세션을 생성하고 사용 완료한 세션을 삭제하는 과정이 필요합니다.
Mock에 관해서 더 파볼 필요가 있습니다!
참고 블로그
https://shinsunyoung.tistory.com/70
'Spring' 카테고리의 다른 글
로그인 체크 기능 간결하고 낮은 결합도로 구현해보기 (0) | 2022.01.28 |
---|---|
스프링 부트 AutoConfiguration 원리 (0) | 2022.01.15 |
SpringBoot의 의존성 버전 관리와 원리 (0) | 2022.01.04 |
logging @SLF4J (0) | 2022.01.04 |
H2 DB 사용해보기 (0) | 2021.11.07 |