inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

회원 리포지토리 테스트 케이스 작성

findByName() 테스트 시 NoSuchElementException 에러

616

HH

작성한 질문수 20

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)


2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)


3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)



[질문 내용]
안녕하세요 강의 잘 보고 있습니다 ㅎㅎ

다름이 아니라 저는 getter와 setter를 따로 작성하지 않고 Lombok을 이용해서 getter, builder 어노테이션으로 getter와 setter를 생성했는데요

save() 테스트는 정상적으로 통과하지만

findByNmae() 테스트 시에는 아래와 같은 오류가 발생합니다.

그리고 아래 처럼 get() 메서드에 노란 점선이 표시되며

옆에 이상한 문구가 뜨는데 lombok을 사용해서 발생한 오류일까요 ??

스프링 부트 버전은 강의와 똑같이 2.3.1 버전을 사용중이며

각 클래스별 코드는 아래와 같습니다.

package com.example.hellospring.domain;

import lombok.Builder;
import lombok.Getter;

@Getter
public class Member {
    private Long id;
    private String name;

    @Builder
    public Member(Long id, String name) {
        this.id = id;
        this.name = name;
    }
}

 

package com.example.hellospring.repository;

import com.example.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public interface MemberRepository {
    // 회원 저장
    Member save(Member member);
    // id로 회원 찾기
    Optional<Member> findById(Long id); // Optional 타입은 값이 Null일 때 null 반환
    // name으로 이름 찾기
    Optional<Member> findByName(String name);
    // 전체 찾기
    List<Member> findAll();
}

 

package com.example.hellospring.repository;

import com.example.hellospring.domain.Member;

import java.util.*;

public class MemoryMemberRepository implements MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    @Override
    public Member save(Member member) {
        Member.builder()
                .id(++sequence)
                .build();
        store.put(member.getId(), member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
        return Optional.ofNullable(store.get(id));
    }

    @Override
    public Optional<Member> findByName(String name) {
        return store.values().stream()
                .filter(member -> member.getName().equals(name))
                .findAny();
    }

    @Override
    public List<Member> findAll() {
        return new ArrayList<>(store.values());
    }
}

 

 

 

java spring spring-boot

답변 1

0

y2gcoder

안녕하세요, HH 님. 공식 서포터즈 y2gcoder 입니다.

public class MemoryMemberRepository implements MemberRepository {
    //...

    @Override
    public Member save(Member member) {
        Member.builder()
                .id(++sequence)
                .build();
        store.put(member.getId(), member);
        return member;
    }

    //...
}

해당 부분에서 문제가 2개 존재합니다.

1) sequence가 저장되지 않습니다. 왜냐하면 Member.builder().build()를 통해 다른 member 인스턴스를 생성해주시기 때문입니다.
2) 1)의 결과로 id가 null인 member 객체를 저장하고 있습니다.

기존 코드로 save()쪽을 디버깅해서 member가 정상적으로 저장되는 지 보시고 위의 save() 코드를 적절하게 바꿔주시기 바랍니다.


감사합니다.

..

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

88

1

java static class와 kotlin class

0

79

1

스프링 DB연결

0

126

1

소요 시간

0

85

2

ddl.sql에 빨간 밑줄

1

102

2

welcome page 에러

0

182

3

잘 모르겠습니다.

0

164

2

fail을 똑같이 쳤는데 오류가 발생해요

0

156

2

index.html Welcome page

0

121

1

프로젝트 gradle-groovy ?

0

369

1

테스트코드 메서드명 한글

0

202

2