<스프링을 이용한 간단한 회원가입 서비스 만들기>
본 포스팅은 스프링을 이용한 간단한 예제 프로젝트입니다.
개발을 하고나면 해당 기능이 제대로 동작하는지 테스팅해보아야 한다.
테스팅하는 방법으로 쉽게 생각해볼 때 main메서드나 컨트롤러의 url을 호출하는 방법이 있겠지만
프로젝트 규모가 커지고 여러명이 개발하게 되면 이러한 방법만으로 테스팅하는 것은 쉽지않다.
Java에서는 이러한 문제를 JUnit이라는 프레임워크를 제공해서
쉽게 만든 기능을 테스트할 수 있는 환경을 제공한다.
우선 이전 포스팅에서 개발한 리포지토리 통신 소스코드는 아래와 같다.
- 테스트를 진행할 Repository 코드
public interface UserRepository {
UserVO save(UserVO userVO);
Optional<UserVO> findById(Long id);
Optional<UserVO> findByName(String name);
List<UserVO> findAll();
void clearData();
}
- UserRepository의 구현체
public class MemoryUserRepositoryImpl implements UserRepository {
Map<Long, UserVO> userMap = new HashMap<>();
private static long sequence=0L;
@Override
public UserVO save(UserVO userVO) {
userVO.setId(++sequence);
userMap.put(userVO.getId(), userVO);
return userVO;
}
@Override
public Optional<UserVO> findById(Long id) {
return Optional.ofNullable(userMap.get(id));
}
@Override
public Optional<UserVO> findByName(String name) {
return userMap.values().stream().filter(
u->u.getName().equals(name)
).findAny();
}
@Override
public List<UserVO> findAll() {
return new ArrayList<>(userMap.values());
}
@Override
public void clearData() {
userMap.clear();
}
}
크게 메모리에 데이터를 저장하고 간단하게 조회하는 기능으로 작성되어있다.
이 코드의 테스트코드를 만들어보자.
테스트 코드는 src/test/java 하위 폴더에 생성하면 된다.
참고로 테스트코드는
테스트 하위에 클래스를 만들어서 생성해도 되고
인텔리제이를 사용하고 있다면 테스트할 코드 클래스 명(UserRepository)에 커서를 놓고
윈도우는 Alt+Insert, mac이라면 Command+Enter를 누르면 Generate메뉴가 생성되고 Test를 누르면 인텔리제이가 자동으로 테스트코드를 생성해준다!
해당 리포지토리에 대한 테스트 코드는 다음과 같다.
class UserRepositoryTest {
UserRepository userRepository=new MemoryUserRepositoryImpl();
@AfterEach
public void afterEach() {
userRepository.clearData();
}
@Test
void save() {
UserVO user = new UserVO();
user.setName("test");
userRepository.save(user);
UserVO result = userRepository.findById(user.getId()).get();
assertThat(user).isEqualTo(result);
}
@Test
public void findByName() {
//given
UserVO userVO1 = new UserVO();
userVO1.setName("test1");
userRepository.save(userVO1);
UserVO userVO2 = new UserVO();
userVO2.setName("test2");
userRepository.save(userVO2);
//when
UserVO result = userRepository.findByName("test1").get();
//then
assertThat(result).isEqualTo(userVO1);
}
@Test
public void findAll() {
//given
UserVO userVO1 = new UserVO();
userVO1.setName("test1");
userRepository.save(userVO1);
UserVO userVO2 = new UserVO();
userVO2.setName("test2");
userRepository.save(userVO2);
//when
List<UserVO> result = userRepository.findAll();
//then
assertThat(result.size()).isEqualTo(2);
}
}
먼저 간단한 설명을 하자면
@Test 어노테이션을 붙인 메서드가 테스트할 메서드로 등록이되어 main메서드처럼 실행할 수 있게 된다.
그리고 @AfterEach 어노테이션을 붙인 메서드는
각 테스트메서드들이 실행완료된 다음에 한번씩 호출이 된다.
여기서는 각 메서드에서 저장한 데이터들을 비워주는 용도로 사용하였다.
이렇게 테스트코드를 생성했다면 이제 테스트를 해보자.
인텔리제이를 사용중이라면 각 클래스 및 메서드옆에 화살표 모양이 생기는데
이 버튼을 눌러주면 테스트가 가능하다.
클래스쪽 화살표를 누르면 해당 클래스에 속한 모든 메서드가,
메서드 화살표를 누르면 해당 메서드만 실행이 가능하다.
참고로 테스트 폴더내에 패키지나 파일명등을 우클릭하면
아래 이미지와 같이 테스트할수 있는 메뉴가 등장한다.
패키지에서 누르면 하위에 있는 모든 테스트코드가 돌아가고
특정 파일에서 우클릭하면 해당 파일에서만 테스트코드를 돌릴 수 있다.
테스트를 돌리고 아래와같이 뜨면 성공이다.
초록불이 들어오면 테스트가 성공한 것이고
만약 빨간불이 뜨고있다면 실패한 것이다.
실패하였다면 검증로직이 들어가는 Assertion에서 검증을 잘못했거나
만든 기능이 제대로 동작하고 있지 않다는 뜻이니 다시 검토해보아야 한다.
'Backend > 게시판만들기' 카테고리의 다른 글
[Spring실습] 5분만에 알아보는 스프링 빈을 등록하는 두가지 방법-4 (0) | 2020.11.30 |
---|---|
[Spring실습] 5분만에 알아보는 회원가입 서비스 만들기-3 (0) | 2020.11.30 |
[Spring실습] 5분만에 알아보는 프로젝트 설계 예제 및 회원 도메인과 리포지토리 만들기-1 (0) | 2020.11.24 |
[SpringBoot]게시판 로그인 기능 제작 및 예제(Form데이터 Controller에서 받아서 처리하기) (2) | 2020.08.16 |
[SpringBoot]SpringDataJPA를 활용하여 회원가입 예제- Controller,Service,Repository의 역할및 구현 (3) | 2020.08.10 |