해결된 질문
작성
·
421
1
@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 res = repository.findByName("spring1").get();
assertThat(res).isEqualTo(member1);
}
코드에 이상이 있는 것 같지는 않은데... java.lang.NullPointerException이 뜨네요ㅠㅠ 다른 테스트들은 잘 돌아갑니다.
MemoryMemberRepository.java 일부
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
답변 3
2
오늘 다시 보니 테스트 코드에서 setName을 member1에서만 2번 했네요^^; spring2라는 이름만 가지고 있는데 spring1을 검색해서 에러가 난 것 같습니다. 질문 받아주셔서 감사합니다
0
예상으로는 람다식 사용할 때 오류가 난 것 같고
java.lang.NullPointerException
at test.hellospring.repository.MemoryMemberRepository.lambda$0(MemoryMemberRepository.java:31)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
at java.base/java.util.HashMap$ValueSpliterator.tryAdvance(HashMap.java:1696)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findAny(ReferencePipeline.java:548)
...
해당 코드의 전문입니다
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long,Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny(); // 하나라도 찾기
}
public void clearStore() {
store.clear();
}
}
0