전 시간에 만들었던 회원 서비스를 Junit을 이용하여 테스트를 해보았다!
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach() {
memberRepository.clearStore();
}
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1 =new Member();
member1.setName("Spring");
Member member2 =new Member();
member2.setName("Spring");
//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
/* try {
memberService.join(member2);
fail();
}catch(IllegalStateException e){
Assertions.assertThat(e.getMessage()).isEqualTo("");
}*/
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
테스트 같은 경우에는 외국인들과 일하는 것이 아니라면 메서드명을 한글로 해도 상관이없다!
또한 given , when, then 주석을 이용하여 과정을 정리하는 것이 도움이 된다!
일단 회원가입 같은 경우
멤버 객체를 만들고 이름을 넣어준 뒤 saveId 변수에 id 값을 받고
findMember메서드를 이용하여 나온Name 값과 현재 Name값이 같은지 확인한다!
하지만 이 경우 중복회원가입에 대한 예외가 터지는지를 알 지못하기 때문에
테스트를 하나 더작성하였다
이름은 중복_회원_예외!
두 객체를 생성후 Name값을 같게 준다!
join을 이용하여 1번 멤버를 가입시킨다
2번 멤버를 가입시킬때 예외가 뜬다면 이미 존재하는 회원입니다 라는
문구가 나오는데 그문구와 같다면 중복회원을 막는것이 성공한 것이다!
그리고 또한 메모리값을 초기화 해주기 위해 클리어 해주는 afterEach()를 생성하고
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
MemberService클래스에서의 수정일 필요하다 이유는 MemberService의 테스트를 하는데
다른 인스턴스 이기 때문이다!!
그리고 동작하기 전에 넣어주어야 하기때문에
BeforeEach
를 이용하여 선언만 해준 코드에다가
객체를 생성한다 이렇게하면 테스트 실행할때 마다
그 전에 실행이 된다!
이것은 직접 멤버서비스 입장에서는 직접 new하지않고 외부에서 넣어주게 되는데
이것을 DI(의존성 주입) 이라고한다!
'웹프로그래밍 > Spring 입문' 카테고리의 다른 글
| 11. 자바 코드로 직접 스프링 빈 등록하기 (0) | 2021.06.22 |
|---|---|
| 10. 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2021.06.22 |
| 8. 회원 서비스 개발 (0) | 2021.06.19 |
| 7. 회원 리포지토리 테스트 케이스 작성 (0) | 2021.06.19 |
| 6. 회원 도메인과 리포지토리 만들기 (0) | 2021.06.17 |