강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

박재은님의 프로필 이미지
박재은

작성한 질문수

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

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

findByName에서 NullPointerException

작성

·

374

0

<Member class>

package hello.hellospring.domain;

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

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

<MemberRepository>

package hello.hellospring.repository;
import hello.hellospring.domain.Member;

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

public interface MemberRepository {
    Member save(Member member);
    Optional<Member> findById(Long id);
    Optional<Member> findByName(String name);
    List<Member> findAll();


//    void clearStore();
}

<MemoryMemberRepository>

package hello.hellospring.repository;

import hello.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.setId(++sequence);
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());
}
// public void clearStore(){
// store.clear();
// };
}

<MemoryMemberRepository>

package hello.hellospring.repository;

import hello.hellospring.domain.Member;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.*;

public class MemoryMemberRepositoryTest {
MemberRepository repository = new MemoryMemberRepository();

// @AfterEach
// public void afterEach(){
// repository.clearStore();
// }

@Test
public void save(){
Member member = new Member();
member.setName("spring");

repository.save(member);
Member result = repository.findById(member.getId()).get();
assertThat(member).isEqualTo(result);
}
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);

Member member2 = new Member();
member1.setName("spring2");
repository.save(member2);

Member result = repository.findByName("spring1").get();
assertThat(result).isEqualTo(member1);

}

}

 

 

이런 오류가 발생합니다 name 도 전부 확인 해봤고 afterEach도 써봤지만 계속해서 같은 오류가 납니다.

 

 

 

 

퀴즈

Which layer is primarily responsible for the core business logic (e.g., checking for duplicate members) when developing an application?

Controller(Controller)

Service

Repository

Domain

답변 2

0

안녕하세요. 박재은님, 공식 서포터즈 OMG입니다.

 Member member1 = new Member();
member1.setName("spring1");
repository.save(member1);

Member member2 = new Member();
member1.setName("spring2");
repository.save(member2)


member1.setName이 두번 입력되었습니다.

두번째 member1.setName~을 member2로 변경해주세요


감사합니다.

0

박재은님의 프로필 이미지
박재은
질문자

테스트에서 findByName에 spring1이 아닌 spring2를 넣었더니 해결되었습니다. 왜 그러는지 알 수 있을까요??

박재은님의 프로필 이미지
박재은

작성한 질문수

질문하기