MemberServiceTest.java 에서 오류가 나는 이유
304
投稿した質問数 14
섹션 3 회원관리 예제 - 백엔드 개발을 학습 중에 있습니다.
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 java.util.Optional;
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;
// Test 는 한글로 바꾸어도 된다 (실제 prodution 되는 코드는 한글 x) ,test 코드는 build 시 포함 안됨
class MemberServiceTest {
// MemberService memberService=new MemberService();
// MemberService 에서 memberRepository 객체와 Test 에서의 memberRepository 객체가 달라서
// 객체 변수(store) 접근시 다른 store 로 접근할 수 있다
// 다른 repository 를 이용하기 때문에 문제가 된다
// MemoryMemberRepository memberRepository=new MemoryMemberRepository();
MemberService memberService;
MemoryMemberRepository memberRepository;
// test 전에 같은 memberRepository 를 가지도록 할 수 있다 (service 와 test 모두 같음)
// 이와 같은 상황을 DI(Dependency Injection) 의존성 주입 이라고 한다
@BeforeEach // 각각의 test 메소드 실행 전에 호출되어 처리
public void beforeEach(){
memberRepository =new MemoryMemberRepository();
memberService=new MemberService(memberRepository);
}
// // test 실행될 때마다 store 를 지우게 된다
// @AfterEach // 각각의 test 메소드 실행 후에 호출되어 처리
// public void afterEach(){
// memberRepository.clearStore();
// }
@Test
void 회원가입() {
//given : 이런 data 를
Member member=new Member();
member.setName("spring3");
//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));
// message 검증
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
// try catch 활용
/* try{
memberService.join(member2);
fail();
}catch (IllegalStateException e){
// 중복 예외 터져서 정상적으로 수행된 경우
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
}
*/
//then
}
@Test
void findMembers() {
}
@Test
void findOne() {
}
}
위와 같은 코드에서 제가 생각하기에 현재 @BeforeEach 에 의해서 test 메소드 실행전에 memberRepository와 memberService가 각각 new 연산자를 통해서 새롭게 메모리를 부여받는다고 생각합니다.
그래서 @AfterEach 코드가 없어도 매번 새로운 값이기 때문에 서로 중복되는 name을 가지면서 test를 해도 문제가 안된다고 생각하는데 @AfterEach를 생략하고 실행하니 회원가입 메소드에서 중복때문에 오류가 납니다.
제가 어떤 부분을 놓친 건가요??
回答 1
..
0
76
2
Unused property.....
0
99
2
project JDK is misconfigured
0
132
2
외부 API의 ID 타입(String/UUID)과 내부 도메인의 ID 타입(Long)이 불일치할 때의 설계 정석
0
83
2
단위/통합 테스트 버전충돌 문제
0
91
2
❗️springboot 4.0.2 버전 aspectj dependency 설정❗️
0
230
1
왜 컨트롤러는 변한게 없는데 새로 만든 html 파일이 뜨나요?
0
103
2
윈도우 build test오류 질문
1
102
2
테스트 관련 공부에 대한 조언을 얻고 싶습니다
0
99
2
테스트 실행 시 에러 질문
0
291
1
name을 통한 비교와 객체를 통한 비교
0
77
1
빌드 후 libs 없음
1
129
1
윈도우 gradlew.bat 에러
0
167
1
@PostMapping("/members/new")가 동작하지 않습니다
0
89
1
java static class와 kotlin class
0
79
1
스프링 DB연결
0
126
1
소요 시간
0
87
2
ddl.sql에 빨간 밑줄
1
102
2
welcome page 에러
0
183
3
잘 모르겠습니다.
0
164
2
fail을 똑같이 쳤는데 오류가 발생해요
0
156
2
index.html Welcome page
0
122
1
프로젝트 gradle-groovy ?
0
369
1
테스트코드 메서드명 한글
0
202
2

