inflearn logo
강의

Khóa học

Chia sẻ kiến thức

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

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

1003

blackjune

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

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.js aws spring-boot jpa spring-security

Câu trả lời 3

1

blackjune

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

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

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

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

0

blackjune

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

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

0

blackjune

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

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

1040

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

482

1

CommentService에서 Repository를 호출하지 않는데도

0

340

1

Editor....를 활용한 패턴에 질문있습니다.

0

492

1