728x90
이전 포스팅에서 다루었던 회원 리포지토리와 서비스에 대해 테스트를 작성해보겠다.
갑자기 생각난건데, 학생이라면 꼭 jetbrain 홈페이지에서 학생인증하고 인텔리제이 상위버전 사용하자..!
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import java.util.List;
// import static org.assertj.core.api.Assertions.assertThat;
// 테스트는 절대로 순서에 의존하면 안됨
// 개발 -> 테스트 케이스 작성 순서가 아니라
// 테스트 케이스 작성 -> 개발 순서도 존재 Test Driven Development(테스트 주도 개발)
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@AfterEach
public void afterEach() {
repository.clearStore(); // 테스트 끝날 때 마다 clear -> 순서에 의존성이 없어야 하기 때문
}
@Test
public void save(){
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
// Assertions.assertEquals(member,result);
// assertThat(member).isEqualTo(result);
Assertions.assertThat(member).isEqualTo(result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
Member result = repository.findByName("spring2").get();
Assertions.assertThat(result).isEqualTo(member2);
}
@Test
public void findAll(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);
Member member2 = new Member();
member2.setName("spring2");
repository.save(member2);
List<Member>result = repository.findAll();
Assertions.assertThat(result.size()).isEqualTo(2);
}
}
테스트 클래스 실행 시
위와 같이 된다면 성공적이다.
다음은 회원 서비스 테스트이다.
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
// 서비스는 함수명을 한글로 해도 가능, 영어권 사람들과 협업하는게 아닌 이상
class MemberServiceTest {
MemberService memberService ;
MemoryMemberRepository memberRepository;
//각 테스트 실행 전에 호출된다. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고,
//의존관계도 새로 맺어준다.
@BeforeEach
public void beforeEach(){
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
public void afterEach(){
memberRepository.clearStore();
}
// 테스트는 크게 given-when-then으로 이루어짐
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("spring");
//when
Long saveId = memberService.join(member);
//then
Member findMember = memberService.findOne(saveId).get();
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);
//memberService.join(member2);
//람다 로식 실행 시, IllegalStateException 실행되어야 함 중복이므로
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//then
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
마찬가지로 클래스 run 했을 때 아까 사진과 같은 모습이면 성공이다.
테스트 코드를 작성할 땐 given, when, then을 적극적으로 활용하는 것이 좋다고 한다.
728x90
'스프링(JAVA)' 카테고리의 다른 글
스프링 DB 접근 기술 #1 JDBC, JDBC Template (0) | 2022.09.25 |
---|---|
Spring 웹mvc 간단 회원 관리 예제(홈 화면, 등록, 조회) (0) | 2022.09.25 |
Spring 스프링 빈과 의존관계 (0) | 2022.09.25 |
Spring 회원 관리 예제 (0) | 2022.07.12 |
Spring 입문 (0) | 2022.07.12 |