2022.03.09 - [Java/Spring입문] - Spring 입문(6) 회원관리 예제 - 백엔드 개발-1(테스트케이스작성까지)
2022.03.10 - [Java/Spring입문] - Spring 입문(7) 회원관리 예제 - 백엔드 개발-2
1. 회원 도메인과 레포지토리 만들기
- domain -> Member.java(VO): 변수와 Getter Setter
- repository -> MemberRepository Interface , MemoryMemberRepository implements MemberRepository
2. 테스트 케이스 작성하기
src/test/java에 repository 패키지 생성 뒤 MemoryMemberRepositoryTest 클래스 파일 생성
ctrl+f11로 실행하기!
result가 기대한 결과값일 때!
result가 null 일 때!
package com.example.inflearn_spring.repository;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import com.example.inflearn_spring.domain.Member;
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result); //Assertions.assertEquals(member, result);
}
}
Assertions.assertEquals(member, result) 대신에 assertThat(member).isEqualTo(result)로 할 수 있다. 대신에 import static org.assertj.core.api.Assertions.assertThat을 import 해줘야 한다!
Test 전체 코드
package com.example.inflearn_spring.repository;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import com.example.inflearn_spring.domain.Member;
class MemoryMemberRepositoryTest {
MemoryMemberRepository repository = new MemoryMemberRepository();
@Test
public void save() {
Member member = new Member();
member.setName("spring");
repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result); //Assertions.assertEquals(member, result);
}
@Test
public void findByName() {
Member member1 = new Member();
member1.setName("test1");
repository.save(member1);
Member member2 = new Member();
member2.setName("test2");
repository.save(member2);
Member result = repository.findByName("test1").get();
assertThat(result).isEqualTo(member1);
}
@Test
public void findAll() {
Member member1 = new Member();
member1.setName("test1");
repository.save(member1);
Member member2 = new Member();
member2.setName("test2");
repository.save(member2);
List<Member> result = repository.findAll();
assertThat(result.size()).isEqualTo(2);
}
// 한 메서드를 Test하고 나서 그 다음 메서드를 실행하기 전에 데이터 삭제!
@AfterEach
public void afterEach() {
repository.clearStore();
}
한 메서드가 테스트에 실패했으면 이렇게 밑처럼 된다.
3. 회원 서비스 개발
src/main/java에 service 패키지 만든 후 MemberService 클래스 생성
회원가입(join), 전체 회원 조회(findMembers), id로 한 회원만 조회(findOne)하는 메서드 생성
4. 회원 서비스 테스트
테스트하려는 파일을 클릭 -> New -> JUnit Test Case를 하게 되면 간편하게 테스트 파일 생성 가능!
Join (given -> when -> then)을 따라서!
@Test
void Join() {
// 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());
}
예외가 더 중요함! (1)번은 Try Catch문으로 비교 (2)번은 IllegalStateException.class가 실행될때로(NullpointExceptio을 넣으면 fail) (3)번은 IllegalStateException message로 비교
@Test
void 중복회원예외() {
Member member1 = new Member();
member1.setName("spring");
Member member2 = new Member();
member2.setName("spring");
memberService.join(member1);
// (1) try catch 문
// try {
// memberService.join(member2);
// fail();
// }catch(IllegalStateException e) {
// assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// }
// (2) assertThrows
// assertThrows(IllegalStateException.class, ()-> memberService.join(member2));
// (3) assertThrows + getMessage
IllegalStateException e = assertThrows(IllegalStateException.class,
()->memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
'Java > Spring입문' 카테고리의 다른 글
Spring 입문(7) 회원관리 예제 - 백엔드 개발-2 (0) | 2023.04.20 |
---|---|
Spring 입문(6) 회원관리 예제 - 백엔드 개발-1(테스트케이스작성까지) (0) | 2023.04.20 |
[Spring입문 - Eclipse(1)] View 환경설정 및 빌드하고 실행, 스프링 웹 개발 기초 (0) | 2022.11.30 |
Spring 입문(12) 스프링 DB 접근 기술: 순수 JDBC(스프링 통합테스트) (0) | 2022.03.11 |
Spring 입문(5) 스프링 웹 개발 기초(정적 컨텐츠, 템플릿엔진(MVC), API) (0) | 2022.03.09 |