Entity 생성 및 Repository 테스트
15217 단어 SpringbootSpringboot
1. Entity 생성
미리 작성된 ERD를 바탕으로 도메인 생성
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Todo extends BaseEntity {
@Id @GeneratedValue
private Long seq;
@Builder
public Todo(String name, String content, TodoStatus status, Integer predictedPomo, Integer realPomo, WorkProficiency workProficiency, WorkType workType, WorkImportance workImportance) {
this.name = name;
this.content = content;
this.status = status;
this.predictedPomo = predictedPomo;
this.realPomo = realPomo;
this.workProficiency = workProficiency;
this.workType = workType;
this.workImportance = workImportance;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="group_seq")
private Group group;
private String name, content;
private TodoStatus status;
private Integer predictedPomo, realPomo;
private WorkProficiency workProficiency;
private WorkType workType;
private WorkImportance workImportance;
}
[ Annotation ]
- @Entity: 테이블에 대응하는 하나의 클래스
- 기본 생성자 필수! → JPA가 엔티티 객체 생성 시 기본 생성자 사용
- @Getter: Lombok라이브러리로 Getter 메소드 생성
- Setter를 쓰지 않는 이유: 어떤 포인트에서든지 Setter 함수 호출을 통해 Entity의 값을 변경할 수 있다면, 변경한 의도를 파악하기 어려움 → 의도를 파악할 수 있는 함수를 만들어 호출
( More: https://yoonbing9.tistory.com/28 )
- @Id: 기본키 매핑
- @GeneratedValue와 같이 사용 시, 자동 생성
- @Builder: 엔티티 객체 생성자 → Builder 패턴 적용
- 인자가 많을 경우 안전하게 객체 생성 가능
- 인자의 순서와 상관없이 객체 생성 가능
[ 연관관계 매핑 ]
Todo는 Group과 단방향 N:1 관계를 가지고 있음
- ManyToOne
- 다대일 관계를 나타내는 매핑정보
- fetch = fetchType.LAZY
- ToDo를 조회할 시, Group을 조회하는 쿼리가 생성되지 않고, 실제로 Group을 사용하는 시점에서 Group을 조회하는 쿼리가 나감 → Proxy로 조회
- JoinColumn(name=”team_seq”)
- 매핑할 외래키의 이름을 명시하여 생성
- More: https://private-space.tistory.com/87
2. Repository 생성
public interface TodoRepository extends JpaRepository<Todo, Long> {}
JPARepository를 상속 받는 interface생성
- JPARepository
- CRUD 메소드를 제공
- 메소드 명명규칙에 따라 메소드 이름을 지어주면, JPA가 이름을 분석해 적절한 JPQL 실행
3. Repository 단위테스트
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class TodoRepositoryTest {
@Autowired
private TodoRepository todoRepository;
@Test
void testCreateTodo() {
// given
Todo todo = Todo.builder()
.name("할일")
.content("내용")
.predictedPomo(1)
.realPomo(1)
.status(TodoStatus.TODO)
.workImportance(WorkImportance.LOWER)
.workProficiency(WorkProficiency.ADVANCED)
.build();
// when
Todo savedTodo = todoRepository.save(todo);
// then
assertThat(savedTodo.getName()).isEqualTo("할일");
assertThat(savedTodo.getContent()).isEqualTo("내용");
assertThat(savedTodo.getPredictedPomo()).isEqualTo(1);
assertThat(savedTodo.getRealPomo()).isEqualTo(1);
assertThat(savedTodo.getStatus()).isEqualTo(TodoStatus.TODO);
assertThat(savedTodo.getWorkImportance()).isEqualTo(WorkImportance.LOWER);
assertThat(savedTodo.getWorkProficiency()).isEqualTo(WorkProficiency.ADVANCED);
}
}
Author And Source
이 문제에 관하여(Entity 생성 및 Repository 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@dot2__/Entity-생성-및-Repository-테스트
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
미리 작성된 ERD를 바탕으로 도메인 생성
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Todo extends BaseEntity {
@Id @GeneratedValue
private Long seq;
@Builder
public Todo(String name, String content, TodoStatus status, Integer predictedPomo, Integer realPomo, WorkProficiency workProficiency, WorkType workType, WorkImportance workImportance) {
this.name = name;
this.content = content;
this.status = status;
this.predictedPomo = predictedPomo;
this.realPomo = realPomo;
this.workProficiency = workProficiency;
this.workType = workType;
this.workImportance = workImportance;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="group_seq")
private Group group;
private String name, content;
private TodoStatus status;
private Integer predictedPomo, realPomo;
private WorkProficiency workProficiency;
private WorkType workType;
private WorkImportance workImportance;
}
- 기본 생성자 필수! → JPA가 엔티티 객체 생성 시 기본 생성자 사용
- Setter를 쓰지 않는 이유: 어떤 포인트에서든지 Setter 함수 호출을 통해 Entity의 값을 변경할 수 있다면, 변경한 의도를 파악하기 어려움 → 의도를 파악할 수 있는 함수를 만들어 호출
( More: https://yoonbing9.tistory.com/28 )
- @GeneratedValue와 같이 사용 시, 자동 생성
- 인자가 많을 경우 안전하게 객체 생성 가능
- 인자의 순서와 상관없이 객체 생성 가능
Todo는 Group과 단방향 N:1 관계를 가지고 있음
- ManyToOne
- 다대일 관계를 나타내는 매핑정보
- fetch = fetchType.LAZY
- ToDo를 조회할 시, Group을 조회하는 쿼리가 생성되지 않고, 실제로 Group을 사용하는 시점에서 Group을 조회하는 쿼리가 나감 → Proxy로 조회
- JoinColumn(name=”team_seq”)
- 매핑할 외래키의 이름을 명시하여 생성
- More: https://private-space.tistory.com/87
public interface TodoRepository extends JpaRepository<Todo, Long> {}
JPARepository를 상속 받는 interface생성
- JPARepository
- CRUD 메소드를 제공
- 메소드 명명규칙에 따라 메소드 이름을 지어주면, JPA가 이름을 분석해 적절한 JPQL 실행
3. Repository 단위테스트
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class TodoRepositoryTest {
@Autowired
private TodoRepository todoRepository;
@Test
void testCreateTodo() {
// given
Todo todo = Todo.builder()
.name("할일")
.content("내용")
.predictedPomo(1)
.realPomo(1)
.status(TodoStatus.TODO)
.workImportance(WorkImportance.LOWER)
.workProficiency(WorkProficiency.ADVANCED)
.build();
// when
Todo savedTodo = todoRepository.save(todo);
// then
assertThat(savedTodo.getName()).isEqualTo("할일");
assertThat(savedTodo.getContent()).isEqualTo("내용");
assertThat(savedTodo.getPredictedPomo()).isEqualTo(1);
assertThat(savedTodo.getRealPomo()).isEqualTo(1);
assertThat(savedTodo.getStatus()).isEqualTo(TodoStatus.TODO);
assertThat(savedTodo.getWorkImportance()).isEqualTo(WorkImportance.LOWER);
assertThat(savedTodo.getWorkProficiency()).isEqualTo(WorkProficiency.ADVANCED);
}
}
Author And Source
이 문제에 관하여(Entity 생성 및 Repository 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@dot2__/Entity-생성-및-Repository-테스트
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class TodoRepositoryTest {
@Autowired
private TodoRepository todoRepository;
@Test
void testCreateTodo() {
// given
Todo todo = Todo.builder()
.name("할일")
.content("내용")
.predictedPomo(1)
.realPomo(1)
.status(TodoStatus.TODO)
.workImportance(WorkImportance.LOWER)
.workProficiency(WorkProficiency.ADVANCED)
.build();
// when
Todo savedTodo = todoRepository.save(todo);
// then
assertThat(savedTodo.getName()).isEqualTo("할일");
assertThat(savedTodo.getContent()).isEqualTo("내용");
assertThat(savedTodo.getPredictedPomo()).isEqualTo(1);
assertThat(savedTodo.getRealPomo()).isEqualTo(1);
assertThat(savedTodo.getStatus()).isEqualTo(TodoStatus.TODO);
assertThat(savedTodo.getWorkImportance()).isEqualTo(WorkImportance.LOWER);
assertThat(savedTodo.getWorkProficiency()).isEqualTo(WorkProficiency.ADVANCED);
}
}
Author And Source
이 문제에 관하여(Entity 생성 및 Repository 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dot2__/Entity-생성-및-Repository-테스트저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)