강의

멘토링

커뮤니티

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

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

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

Giới thiệu Spring - Học các kỹ thuật truy cập Spring Boot, Web MVC, DB thông qua code

Viết test case cho repository thành viên

findByName 부분에서 java.lang.NullPointerException 오류가 나는 지점에 대해 질문합니다.

Viết

·

1.5K

0


=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (/아니오)

[질문 내용]
회원 리포지토리 테스트 케이스 작성의 findByName() 부분에서 다음과 같은 에러가 뜹니다.
 
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "sejeong_park.hellospring.domain.Member.getName()" is null
 
 
MemoryMemberRepositoryTest.java의 해당 부분은
@Test
public void findByName(){
Member member1 = new Member();
member1.setName("spring1");
repository.save(member1); // member1을 저장

Member member2 = new Member();
member2.setName("spring2");
repository.save(member2); // member1을 저장

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

assertThat(result).isEqualTo(member1);

}
다음과 같이 작성했고,
 
Repository의 전문을 가져오면,
MemberRepository 인스턴스와
package sejeong_park.hellospring.repository;

import sejeong_park.hellospring.domain.Member;

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

public interface MemberRepository {
// Repository 4가지 기능

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

void clearStore();

Optional<Member> findId(Long memberId);
}
MemoryMemberRepository 클래스 전문 입니다.
package sejeong_park.hellospring.repository;

import sejeong_park.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) {
// save 할 때 메모리에 저장을 해야함
// store에 넣기 전에 member ID 값을 세팅해줌
member.setId(++sequence); // 멤버를 저장할 때 sequence 값을 올려줌

store.put(member.getId(), member); // Map에 저장 됨

return member;
}

@Override
public Optional<Member> findById(Long id) {
// store에서 꺼내면 됨

return Optional.ofNullable(store.get(id));
}

@Override
public Optional<Member> findByName(String name) {
// name을 찾는 것
// store value값과 member.getName()과 같은 변수 name값을 찾는 것
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();

}

@Override
public List<Member> findAll() {
return new ArrayList<>(store.values()); // values member들이므로 멤버들을 반환
}

@Override
public void clearStore() {

}

@Override
public Optional<Member> findId(Long memberId) {
return Optional.empty();
}
}
 
에러 코드 상 domain> Member> getName부분에 에러가 있는 듯 하여,
package sejeong_park.hellospring.domain;

public class Member {

private Long id; // 아이디 식별자 -> 시스템이 지정해주는 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 spring) {
this.name = name;
}
}
 
 
위는 domain>Member의 전문입니다.
 
자료와 코드를 비교해보았는데, 코드의 차이점을 찾지 못했습니다.
 
오류를 보면
테스트 NullPointerException 에러를 보아, Optional 혹은 get()하면서 에러가 생긴 듯 한데, 원인을 찾지 못하고 있습니다.
 
 
도움을 주시면 감사하겠습니다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
MVCspringspring-bootjava

Câu trả lời 1

1

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

해결되었습니다.  MemoryMemberRepositoryTest에서 실행하며,  setName이 생성되지 않음을 발견했고, 클래스 내에서 에러 표시를 더블클릭하여 setName을 생성했는데, 변수 명이 spring으로 되어있었습니다. 

 

감사합니다

 

yh님의 프로필 이미지
yh
Người chia sẻ kiến thức

스스로 잘 해결하셨습니다^^

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

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

Đặt câu hỏi