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

전창하님의 프로필 이미지
전창하

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

MemberServiceTest 도중 오류

작성

·

1.2K

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

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

[질문 내용]

테스트 하려고 하면 자꾸 이렇게 뜨네요..ㅠ

package jpabook.jpashop.service;

import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.*;
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
class MemberServiceTest {

    @Autowired MemberService memberService;
    @Autowired
    MemberRepository memberRepository;

    @Test
    public void 회원가입() throws Exception {
        //given
        Member member = new Member();
        member.setName("kim");
        //when
        Long saveId = memberService.join(member);
        //then
        assertEquals(member, memberRepository.findOne(saveId));

    }

    @Test
    public void 중복_회원_예제() throws Exception{
        //given

        //when

        //then
    }
}
package jpabook.jpashop.domain;


import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;

@Entity
@Getter
@Setter
public class Member {
    @Id @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;

    @Embedded
    private Address address;

    @OneToMany(mappedBy = "member")
    private List<Order> orders = new ArrayList<>();



}
package jpabook.jpashop.service;


import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(readOnly = true)
public class MemberService {

    @Autowired
    private MemberRepository memberRepository;

    //회원 가입
    @Transactional
    public Long join(Member member){
        validateDuplicateMember(member);
        memberRepository.save(member);
        return member.getId();
    }

    private void validateDuplicateMember(Member member) {
        //EXCEPTION
        List<Member> findMembers = memberRepository.findByName(member.getName());
        if (!findMembers.isEmpty()){
            throw new IllegalStateException("이미 존재하는 회원입니다.");
        }
    }
    //회원 전체 조회
    public List<Member> findMembers() {
        return memberRepository.findAll();
    }

    public Member findOne(Long memberId){
        return memberRepository.findOne(memberId);
    }

}

 

아 수정해서 올렸습니다!

/Users/changha/Documents/Infrun/jpashop/src/main/java/jpabook/jpashop/service/MemberService.java:24: error: cannot find symbol

return member.getId();

^

symbol: method getId()

location: variable member of type Member

답변 2

0

정확한 것은 MemberService의 코드를 올려주셔야 확실하겠지만

오류 내용만 보고 판단했을 때는 Member의 import 가 잘못되어 getId()를 못찾은 것으로 보입니다. Member를 저희가 만든 Member로 import했는지 확인해주시고, 잘 모르시겠다면 MemberService 전체 코드를 보여주시면 감사하겠습니다 :)

전창하님의 프로필 이미지
전창하
질문자

MemberService import부분도 member제대로 돼있는데 왜 이러는지 잘 모르겠네요 ㅠ

강의 초반부에 테스트 했을 때도 이 오류 떠서 그냥 테스트는 안하고 applcation Run시키니까 작동은 됐습니다

일단 강의 자료 기준으로 생성자 주입을 아직 반영하지 않으신 것 빼고는 별다른 점은 없어보입니다. 번거로우시겠지만 롬복이 기능하지 않고 있나 싶기도 해서 intellij 설정에 들어가서 annotation process로 검색하셔서 해당 기능을 켜주고 다시 테스트해주시겠습니까? 그래도 안된다면 직접 제가 코드를 봐야 될 것 같습니다 :)

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

구글 드라이브 업로드 방법 링크

주의: 업로드시 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

전창하님의 프로필 이미지
전창하
질문자

https://drive.google.com/file/d/1_Yz3gsnExhOwdSj3DDR42eB0gzJXmifL/view?usp=sharing

  1. test폴더의 MemberServiceTest 클래스에 가서 회원가입 메서드를 실행시킵니다.

  2. 회원가입 메서드를 실행시키면 위와 같은 에러가 뜹니다

감사합니다!

보내주신 프로젝트 코드 살펴봤습니다.

MemberServiceTest 를 통과하게 만들기 위해서 2가지가 필요했습니다.

1) build.gradle 수정
2) 루트 패키지에 있는 MemberRepository 삭제

2)은 그냥 삭제하시면 될 것 같고

1) 에서 lombok 추가를 강의자료와는 다른 방법으로 해주고 계셨고, 그로 인해 테스트를 위한 컴파일 시 @Getter에서 getter 메서드를 만들어내지 못해 해당 에러가 계속 발생 중이었습니다.

변경 전

image

변경 후

image

이렇게 바꿔주시고, 루트 패키지에 존재하는 MemberRepository를 삭제해주시면 될 것 같습니다.

 

전창하님의 프로필 이미지
전창하
질문자

정말 감사합니다! 해결됐습니다!!

0

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

해당 내용만으로는 어떤 문제가 생겼는지 파악하기가 어렵습니다 :)

아마 오류 내용 업로드를 누락하신 것 같은데 오류를 볼 수 있는 내용도 같이 올려주시면 감사하겠습니다.

감사합니다.

전창하님의 프로필 이미지
전창하
질문자

수정해서 올렸습니다!

전창하님의 프로필 이미지
전창하

작성한 질문수

질문하기