[해결완료] 로그인 인증 테스트코드 작성 질문입니다
1003
投稿した質問数 13
안녕하세요 호돌맨 선생님!
세션토큰 발급기능 추가를 초반에 보다가 로그인 관련 테스트를 직접 작성해보라고 하셔서 해봤는데 궁금한 점이 있어서 질문드립니다!
작성한코드
@Test
@DisplayName("인증 테스트")
void test11() throws Exception {
// given
Member member = Member.builder()
.email("abc@naver.com")
.password("1234")
.build();
// UserRepository를 MemeberRepository로 이름 변경 했습니다.
memberRepository.save(member);
Login login = Login.builder()
.email("abc@naver.com")
.password("1234")
.build();
String json = objectMapper.writeValueAsString(login);
// expected
mockMvc.perform(post("/auth/login")
.contentType(APPLICATION_JSON)
.content(json)
)
.andExpect(status().isOk())
.andDo(print());
결과
query did not return a unique result: 2; nested exception is javax.persistence.NonUniqueResultException: query did not return a unique result: 2
원인
JPA 에러라는 것을 검색을 통해서 알았습니다
해결 방법 블로그 주소 : https://wakestand.tistory.com/943
UserRepository에 작성한 findByEmailAndPassWord 메서드가 Optional로 되어 있는데 이 부분을 List로 변경해야할 것 같아서 다음과 같이 변경했습니다
변경된 코드
UserRepository
public interface MemberRepository extends CrudRepository<Member, Long> {
List<Member> findByEmailAndPassword(String email, String password);
}AuthService
@Service
@RequiredArgsConstructor
public class AuthService {
private final MemberRepository memberRepository;
public List<Member> signin(Login login) {
List<Member> memberList = Optional.ofNullable(memberRepository.findByEmailAndPassword(login.getEmail(), login.getPassword()))
.orElseThrow(() -> new InvalidSign());
return memberList;
}
}
위 처럼 Optional<Member가 아닌 List<Member>로 변경해서 테스트 로직을 성공하긴했습니다...
질문
UserRepository의 Optional<Member>를 변경하지 않고 테스트 코드를 작성하는 방법이 있을까요??
Optional에서 List로 변경했을 때 문제점은 없을까요?
回答 3
1
원인을 찾았습니다 -,.-;
userRepository에 대한 delete.all을 하지 않아서 JPA 쿼리 에러가 뜨는거였네요........
괜한 곳에서 원인을 찾고 있었습니다.....
죄송합니다 선생님 해결했습니다 ㅠ_ㅠ...
0
강의를 쭉 다시 들어보면서 테스트케이스를 돌렸는데요
PostControleerTest에서 인증테스트 메서드를 만들어서 돌렸을 때랑 따로 AuthControllerTest를 만들어서 했을 때랑 결과가 다르게 나오네여 -,-;;;
동일한 테스트케이스 코드인데 결과가 다르다니 뭔가 신기하네여...
Deprecated 관련 사항들
0
100
2
깃헙 collaboator 초대 관련
0
86
1
강의 듣다가 도커 이미지 생성시 각각도 가능하나 그렇게 사용하는데가 많은지 모르겠다라는 말을 듣고 남김니다
0
157
2
logout 후에 login 페이지 이동은 어디서 시켜주는건가요?
0
229
1
다중 데이터를 삭제 할 때
0
270
2
querydsl Q class 이슈
0
413
2
Windows WSL Vue 설정
2
246
1
Dip, @transactional
0
187
1
[vite] http proxy error: /auth/login
0
1041
2
로그인 하고 나서 GET요청으로 메인페이지 요청
0
234
2
GitHub Collaborator 초대 관련
0
256
2
Window에서 Vue.js 설정
0
321
2
(솔루션 수정)'tsyringe' Error: TypeInfo not known for "클래스명"
0
712
2
collaboator로 초대받을 수 있을까요??
0
283
2
SecurityMockContext 로부터 유저 정보를 가져오기
0
260
1
given 부분이 길어질 때 어떻게 처리하면 좋을까요?
0
317
1
섹션9 프론트의 코드를 보고싶습니다,,,
0
423
1
Spring Security - defaultSuccessUrl 질문
0
624
1
강의 화면이 나오지 않습니다. 음성과 자막만 나와요
0
302
1
JPAQueryFactory(em)의 객체 생성자 오류에 대해서 질문이 있습니다ㅜㅜ
0
689
2
ExceptionHandler가 AccessDeniedHandler(Http403Handler)를 먹어버리는 현상
0
1178
2
섹션10 언제 나오나요?
0
483
1
CommentService에서 Repository를 호출하지 않는데도
0
341
1
Editor....를 활용한 패턴에 질문있습니다.
0
493
1

