250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링부트
- 백엔드
- 백엔드개발자
- 데이터베이스
- 국비지원코딩
- 개발자일기
- 리액트
- 프로그래머스
- db
- 프로그래머
- 소셜로그인구현
- 프로세스
- 자바의정석
- 알고리즘
- 미라클모닝
- 국비지원
- 개발자
- 코딩
- Java
- 운영체제
- React
- 프로그래밍
- 자바개발자
- 코드업
- Codeup
- SpringBoot
- 자바알고리즘
- 자바스크립트
- 자바
- 혼공컴운
Archives
- Today
- Total
초코딩(chocoding)
[springboot/인프런] 코드로 배우는 스프링 부트 - 회원 서비스 테스트 본문
728x90
이전 테스트에서는 test 패키지, 서비스 직접 다 만들어주었다.
하지만 해당 클래서에서 ctrl + shift + t (윈도우 기준)를 누르면 자동으로 테스트 코드를 생성해준다.

메서드 선택 후 ok 버튼 클릭 시,

짜잔~
잘 생성된 것을 볼 수 있다.
강사님께서 말씀하시기를 테스트 코드는 빌드될 때 제외되는 코드이기 때문에
회사에서 외국 클라이언트를 상대하는 것이 아닌 이상
직관적으로 보기 위하여 테스트 코드 한정 한글로 메서드 이름을 적는 경우도 있다고 하셨다.
<여기서 잠깐!!>
- static import 단축키
=> alt + enter
- parameter 추출
=> ctrl + alt + v
package hello.hellospring.service;
import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
/*
회원 가입
*/
public Long join(Member member) {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m -> {
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
/*
전체 회원 조회
*/
public List<Member> findMember() {
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId) {
return memberRepository.findById(memberId);
}
}
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();
}
@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);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
/* try {
memberService.join(member2);
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}*/
//then
}
@Test
void findMember() {
}
@Test
void findOne() {
}
}
이전 코드에서는 동일한 repositroy를 사용하는 것이 아닌 각각의 repository를 생성하여서 사용하였다.
하지만 생각해보면 그리 좋은 방법은 아니다.
하나의 저장소를 공유하는 것이 맞다.
따라서 직접 new를 통해 repository를 직접 생성하는 것이 아니라 외부에서 끌어다가 주입을 하였다.
=> 이것을 의존성 주입이라고 함
728x90
'SpringBoot' 카테고리의 다른 글
| [intellij / springboot] 인텔리제이 대소문자 구분 없이 자동 완성하기 (0) | 2024.04.18 |
|---|---|
| [Spring Boot] 테스트 케이스 작성하기 / 테스트 코드란? / 테스트 코드 실패 원인 / 테스트 코드 순서 (0) | 2024.04.04 |
| ERD(Entity Relationship Diagram) 자동 생성 tool 추천 (0) | 2024.04.01 |
| [Springboot] @ResponseBody의 사용 방식 / json에 대하여 / viewResolver (1) | 2024.03.27 |
| [IntelliJ IDEA Community Edition] 인텔리제이 무료 버전 설치 방법 (0) | 2024.03.26 |