인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

새싹님의 프로필 이미지
새싹

작성한 질문수

실전! 스프링 데이터 JPA

새로운 엔티티를 구별하는 방법

테스트 오류

작성

·

204

0

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

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

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

[질문 내용]
테스트 할 때 ItemRepositoy 생성자 주입을 했는데 계속 null이라고 나와서요! 혹시 뭐가 문제인걸까요??

package study.datajpa.repository;

import jakarta.persistence.Id;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import study.datajpa.entity.Item;

import static org.junit.Assert.*;

@SpringBootTest
public class ItemRepositoryTest {

    @Autowired ItemRepository itemRepository;

    @Test
    public void save() {
        Item item = new Item("A");
        itemRepository.save(item);
    }

}
package study.datajpa.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import study.datajpa.entity.Item;

public interface ItemRepository extends JpaRepository<Item, Long> {


}
package study.datajpa.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.domain.Persistable;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
public class Item implements Persistable<String> {

//    @GeneratedValue
    @Id
    private String id;

    public Item(String id) {
        this.id = id;
    }

    @CreatedDate
    private LocalDateTime createdDate;

    @Override
    public String getId() {
        return id;
    }

    @Override
    public boolean isNew() { 
        // 해당 데이터가 new냐 아니냐에 따라 새로운 객체인지 아닌지 판단
        return createdDate == null;
    }
}

아래는 오류 내용입니다
Cannot invoke "study.datajpa.repository.ItemRepository.save(Object)" because "this.itemRepository" is null

java.lang.NullPointerException: Cannot invoke "study.datajpa.repository.ItemRepository.save(Object)" because "this.itemRepository" is null

at study.datajpa.repository.ItemRepositoryTest.save(ItemRepositoryTest.java:19)

at java.base/java.lang.reflect.Method.invoke(Method.java:580)


답변 2

0

안녕하세요. 새싹님, 공식 서포터즈 OMG입니다.

@Test 어노테이션의 import가 import org.junit.Test; 되어 있네요

두가지 방안이 있습니다.

(1) import org.junit.Test; 사용 시 RunWith추가 적용 ==> Junit4

image

(2) import org.junit.jupiter.api.Test;로 변경 ==> Junit5

image

build.gradle에 아래 설정이 적용되어 있다보니 4,5 둘다 적용이 가능했었네요^^

image

감사합니다.

0

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

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


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

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

새싹님의 프로필 이미지
새싹
질문자

https://drive.google.com/file/d/1fvY6mWMEOU8Ce3QH15Kt13rA5FhSNCbw/view?usp=sharing
여기있습니다 :)
문제점은 위에 나와있는 Item 테스트 시 발생하는 오류입니다

새싹님의 프로필 이미지
새싹

작성한 질문수

질문하기