강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của blackjune
blackjune

câu hỏi đã được viết

Chương trình phát triển hài hước của Hodolman (SpringBoot, Vue.JS, AWS)

Thêm chức năng cấp Session token

[해결완료] 로그인 인증 테스트코드 작성 질문입니다

Viết

·

978

·

Đã chỉnh sửa

0

안녕하세요 호돌맨 선생님!

세션토큰 발급기능 추가를 초반에 보다가 로그인 관련 테스트를 직접 작성해보라고 하셔서 해봤는데 궁금한 점이 있어서 질문드립니다!

작성한코드

@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>로 변경해서 테스트 로직을 성공하긴했습니다...

 

 

질문

  1. UserRepository의 Optional<Member>를 변경하지 않고 테스트 코드를 작성하는 방법이 있을까요??

  2. Optional에서 List로 변경했을 때 문제점은 없을까요?

     

vue.jsawsspring-bootjpaspring-security

Câu trả lời 3

1

blackjune님의 프로필 이미지
blackjune
Người đặt câu hỏi

원인을 찾았습니다 -,.-;

userRepository에 대한 delete.all을 하지 않아서 JPA 쿼리 에러가 뜨는거였네요........

괜한 곳에서 원인을 찾고 있었습니다.....

죄송합니다 선생님 해결했습니다 ㅠ_ㅠ...

0

blackjune님의 프로필 이미지
blackjune
Người đặt câu hỏi

강의를 쭉 다시 들어보면서 테스트케이스를 돌렸는데요
PostControleerTest에서 인증테스트 메서드를 만들어서 돌렸을 때랑 따로 AuthControllerTest를 만들어서 했을 때랑 결과가 다르게 나오네여 -,-;;;

동일한 테스트케이스 코드인데 결과가 다르다니 뭔가 신기하네여...

0

blackjune님의 프로필 이미지
blackjune
Người đặt câu hỏi

생각해보니 로그인은 한명이라서 굳이 List로 쓸 필요는 없겠네요...흑... 테스트 코드 작성하는 방법을 다시 생각해보겠습니다..

Hình ảnh hồ sơ của blackjune
blackjune

câu hỏi đã được viết

Đặt câu hỏi