이전시간에 이어서 회원서비스 테스트를 진행하기로 했다.
📚 회원서비스 (MemberService) 테스트 클래스 만들기
이전에 Repository 기능 테스트할 때에 test package에 직접 repository package와 class를 생성했다.
하지만 이번시간에는 단축키로 바로 생성할 수 있었다.
1. test package와 class를 만들고 싶은 클래스명을 누르고 Alt + Enter → Create Test 선택
만약 Alt + Enter 안된다면 Ctrl + Shift + T를 눌러도 된다.
2. 아래와 같은 창이 뜨는데 Test 하고싶은 Member 선택하고 OK를 누른다.

3. 자동으로 package와 class가 생성되었음을 확인할 수 있다.

4 회원 서비스(MemberService)의 메서드들을 테스트하기 위해서는 회원 서비스 객체를 생성해준다.
그렇다면 테스트를 위해 given-when-pattern 을 이용해서 테스트 코드를 작성해보자
🤔 given-when-pattern란 ?
-
- Given : 시나리오 진행에 필요한 값을 설정, 테스트의 상태를 설정 [준비]
- When : 시나리오 진행 필요조건 명시, 테스트하고자 하는 행동 [실행]
- Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시, 예상되는 변화 설명 [검증]
📚 회원가입 (join) 테스트
1. Member 객체 member를 생성하여 이름을 hello로 설정한다.
2. Member 객체를 join을 통해 회원 서비스에 회원 가입 후 saveId에 저장해놓는다.
3.findOne을 통해 saveId를 가지고 있는 회원을 찾고, findMember에 저장한다.
4. findMember와 member가 동일한 회원인지 확인한다.
만일 동일한 회원이라면 회원가입 기능이 제대로 작동한다는 것을 확인 할 수 있다.
@Test
void 회원가입() {
// given
Member member = new Member();
member.setName("hello");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
📚 이름 중복회원 회원가입 테스트
이름이 같다면 회원가입이 되지 않는다는 가정을 세웠던 것도 ry - catch문 / assertThrows 2가지 방법으로 진행해보았다.
🌻 try - catch문
try{
memberService.join(member2);
fail();
}catch (IllegalStateException e){
// assertThat을 통해 두 객체가 같은지 확인한다.
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
🌻 assertThrows
//then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
중복회원이 발생한다면
IllegalStateException을 발생시키고 "이미 존재하는 회원입니다." 라는 메세지를 내보내도록 설정했다.
📚 Repository 비우기
repository 테스트 진행했을때 테스트코드는 순서에 의존하게 되기 때문에 정확한 테스트가 진행되지 않는다
그래서 테스트가 끝날때 마다 repository 비우도록 설정하면 된다.
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
📚 MemoryMemberRepository 통합하기
test class 마다 MemoryMemberRepository를 새롭게 생성하다보니 어떤 것과 같은건지 다른건지 확인 하기 어렵다.
래서 service로 가서 아래와 같이 코드를 수정하였다.
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
또한 MemserServiceTest BeforeEach를 이용해서 memberRepository와 memberService객체를 생성하자.
memberService 에서 new를 이용해서 인스턴스를 생성하지 않는다 스프팅의 가장 큰 특징인 즉 DI 를 해주는 것이다.
다음시간에 DI에 대해서 더욱 자세히 알아보자 !
'ON > 실습' 카테고리의 다른 글
[Spring Boot] 스프링 빈과 의존관계 - 자바 코드로 직접 스프링 빈 등록하기 ② (0) | 2023.11.23 |
---|---|
[Spring Boot] 스프링 빈과 의존관계 - 컴포넌트 스캔과 자동 의존관계 설정 ① (0) | 2023.11.20 |
[Spring Boot] 회원관리 예제 - 회원 서비스 개발 ④ (0) | 2023.11.13 |
[Spring Boot] 회원관리 예제 - 회원 리포지토리 테스트 케이스 작성③ (0) | 2023.11.09 |
[Spring Boot] 회원관리 예제 - 회원 도메인과 리포지토리 만들기 ② (2) | 2023.11.08 |
이전시간에 이어서 회원서비스 테스트를 진행하기로 했다.
📚 회원서비스 (MemberService) 테스트 클래스 만들기
이전에 Repository 기능 테스트할 때에 test package에 직접 repository package와 class를 생성했다.
하지만 이번시간에는 단축키로 바로 생성할 수 있었다.
1. test package와 class를 만들고 싶은 클래스명을 누르고 Alt + Enter → Create Test 선택
만약 Alt + Enter 안된다면 Ctrl + Shift + T를 눌러도 된다.
2. 아래와 같은 창이 뜨는데 Test 하고싶은 Member 선택하고 OK를 누른다.

3. 자동으로 package와 class가 생성되었음을 확인할 수 있다.

4 회원 서비스(MemberService)의 메서드들을 테스트하기 위해서는 회원 서비스 객체를 생성해준다.
그렇다면 테스트를 위해 given-when-pattern 을 이용해서 테스트 코드를 작성해보자
🤔 given-when-pattern란 ?
-
- Given : 시나리오 진행에 필요한 값을 설정, 테스트의 상태를 설정 [준비]
- When : 시나리오 진행 필요조건 명시, 테스트하고자 하는 행동 [실행]
- Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시, 예상되는 변화 설명 [검증]
📚 회원가입 (join) 테스트
1. Member 객체 member를 생성하여 이름을 hello로 설정한다.
2. Member 객체를 join을 통해 회원 서비스에 회원 가입 후 saveId에 저장해놓는다.
3.findOne을 통해 saveId를 가지고 있는 회원을 찾고, findMember에 저장한다.
4. findMember와 member가 동일한 회원인지 확인한다.
만일 동일한 회원이라면 회원가입 기능이 제대로 작동한다는 것을 확인 할 수 있다.
@Test
void 회원가입() {
// given
Member member = new Member();
member.setName("hello");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
📚 이름 중복회원 회원가입 테스트
이름이 같다면 회원가입이 되지 않는다는 가정을 세웠던 것도 ry - catch문 / assertThrows 2가지 방법으로 진행해보았다.
🌻 try - catch문
try{
memberService.join(member2);
fail();
}catch (IllegalStateException e){
// assertThat을 통해 두 객체가 같은지 확인한다.
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
🌻 assertThrows
//then
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
중복회원이 발생한다면
IllegalStateException을 발생시키고 "이미 존재하는 회원입니다." 라는 메세지를 내보내도록 설정했다.
📚 Repository 비우기
repository 테스트 진행했을때 테스트코드는 순서에 의존하게 되기 때문에 정확한 테스트가 진행되지 않는다
그래서 테스트가 끝날때 마다 repository 비우도록 설정하면 된다.
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
📚 MemoryMemberRepository 통합하기
test class 마다 MemoryMemberRepository를 새롭게 생성하다보니 어떤 것과 같은건지 다른건지 확인 하기 어렵다.
래서 service로 가서 아래와 같이 코드를 수정하였다.
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
또한 MemserServiceTest BeforeEach를 이용해서 memberRepository와 memberService객체를 생성하자.
memberService 에서 new를 이용해서 인스턴스를 생성하지 않는다 스프팅의 가장 큰 특징인 즉 DI 를 해주는 것이다.
다음시간에 DI에 대해서 더욱 자세히 알아보자 !
'ON > 실습' 카테고리의 다른 글
[Spring Boot] 스프링 빈과 의존관계 - 자바 코드로 직접 스프링 빈 등록하기 ② (0) | 2023.11.23 |
---|---|
[Spring Boot] 스프링 빈과 의존관계 - 컴포넌트 스캔과 자동 의존관계 설정 ① (0) | 2023.11.20 |
[Spring Boot] 회원관리 예제 - 회원 서비스 개발 ④ (0) | 2023.11.13 |
[Spring Boot] 회원관리 예제 - 회원 리포지토리 테스트 케이스 작성③ (0) | 2023.11.09 |
[Spring Boot] 회원관리 예제 - 회원 도메인과 리포지토리 만들기 ② (2) | 2023.11.08 |