테스트 시 java: class, interface, or enum expected 발생
6608
작성한 질문수 1
안녕하세요, 질문이 있습니다.
MemberServiceTest 작동 시,
D:\Workspace\jpashop\src\main\java\jpabook\jpashop\domain\Address.java
java: class, interface, or enum expected
라는 오류가 발생하면서, Address.java 파일이 켜집니다.
이하 MemberService.java,
MemberServiceTest.java,
Address.java 파일과
프로젝트 구조트리입니다.
package jpabook.jpashop.service;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
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)
@RequiredArgsConstructor //final 이 붙은 필드만 생성자 만듦
public class MemberService {
private final MemberRepository memberRepository;
//생성자 주입 (생성자가 하나면 @Autowired 생략 가능)
// public MemberService(MemberRepository memberRepository) {
// this.memberRepository = memberRepository;
// }
/**
* 회원가입
* */
@Transactional //기본값은 readOnly = false
public Long join(Member member) {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member); //영속성 컨텍스트에 persist() 되면, 그 키가 엔티티의 PK 값이다.
return member.getId();
}
private void validateDuplicateMember(Member member) {
//여기에 더해서 멀티 Thread 환경을 고려해, DB의 name 에 unique constraint 를 걸어주는 게 좋다.
List<Member> findMembers = memberRepository.findByName(member.getName());
//또는 세보고 크기가 0이상이면 exeption으로 해도 됨
if(!findMembers.isEmpty()){
throw new IllegalStateException("이미 존재하는 회원입니다.");
}
}
/**
* 회원 전체 조회
* */
public List<Member> findMembers() {
return memberRepository.findAll();
}
public Member findOne(Long memberId) {
return memberRepository.findOne(memberId);
}
}
package jpabook.jpashop.service;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.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.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public 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));
}
}
package jpabook.jpashop.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Embeddable;
@Embeddable
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
/* 값타입 : 변경불가능하게 설계해야 함.
* 따라서 @Setter 는 제거하고, 모든 값을 초기화하는 생성자를 만들어준다.
*
* @Embeddable : JPA 스펙상에서 이 타입은 기본생성자가 필요함(리플랙션 할 때 필요)
* 다만 public 이면 아무데서나 가져 쓸 수 있으므로 protected 로 설정
* */
protected Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
강의안 코드를 복붙해봐도 계속 오류가 발생해서 답답하네요.
그래도 강의 열심히 듣고있습니다. 좋은 하루 보내세요!
답변 2
0
사용하는 곳도 다 강의안대로 복붙했는데 오류가 계속 떴습니다.
Address.java 파일을 아예 삭제하고 다시 만드니 잘 동작되었습니다.
뭔지는 잘 모르겠지만 해당 파일 자체의 문제였던 것 같습니다. ㅠㅠ
감사합니다.
0
안녕하세요. ekfrrns91님, 공식 서포터즈 OMG입니다.
2가지가 의심됩니다.
1. 괄호 갯수 관련
올리신 코드 내에서는 괄호 문제는 없어보이나, Address 클래스를 사용하는 코드 쪽에서 문제가 발생하지 않나 예상합니다.
class, interface or enum expected
이 메시지의 의미는 '키워드 class 나 interface 또는 enum가 없다.' 이지만, 보통 괄호 '{' 또는 '}'의 개수가 일치하지 않는 경우에 발생한다. 열린 괄호 '{'와 닫힌 괄호 '}'의 개수가 같은지 확인하자
참고) https://java.ihoney.pe.kr/84
2. 프로젝트 경로
이전까지 문제가 없었다면 아닐 확률이 높으나
스프링 프로젝트, JDK, 인텔리제이(이클립스) 등은 C드라이브에 위치하지 않을 경우
간혹 문제가 발생하는 경우가 있으니 C드라이브로 옮겨서 확인 부탁드립니다.
테스트 후 결과를 공유해주세요 :)
감사합니다.
안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..
0
29
2
OrderServiceTest 상문주문 테스트 시 update 쿼리 문의
0
42
1
sdk 설정 오류
0
86
2
오탈자 - @Transactional
0
80
1
src/test/resources 테스트 경로 문제
0
76
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
74
1
MemberRepositoryTest 실행오류
0
101
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
209
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
164
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
61
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
91
1
기본 생성자
0
72
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
111
1
멤버서비스테스트 부분에서 막힙니다.
0
193
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
137
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
135
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
128
1
24분 27초 연관관계 편의 메서드 위치
0
122
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
121
2
빌드 툴, Gradle
0
77
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
86
2
Repository에서 EntityManager 주입 방식 차이
0
100
1
롬복과 사용자 정의 setter 메서드
0
80
1
주문 목록 조회 fetch join 질문드립니다
0
96
1





