728x90
반응형
에러 메시지
Cannot invoke "study.data_jpa.repository.MemberJpaRepository.save(study.data_jpa.entity.Member)" because "this.memberJpaRepository" is null
java.lang.NullPointerException: Cannot invoke "study.data_jpa.repository.MemberJpaRepository.save(study.data_jpa.entity.Member)" because "this.memberJpaRepository" is null
at study.data_jpa.repository.MemberJpaRepositoryTest.testMember(MemberJpaRepositoryTest.java:26)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
스프링 부트와 JPA를 사용하면서 간단한 테스트 코드를 작성 후 실행시키려고 하니 위와 같이 repository is null 이라는 에러가 발생했다.
@SpringBootTest, @Transactional 어노테이션도 잘 넣었고 서비스와 레포지토리에도 @Service, @Repository 어노테이션을 잘 넣었다.
도대체 뭐가 문제일까 찾아보다가 발견!
SpringBootTest를 사용해 테스트를 진행하려 했는데 JUnit이 상속받는 SpringRunner 클래스를 사용하지 않아 Bean이 주입되지 않아서 NullPointer 에러가 발생한 것이였다.
@RunWith(SpringRunner.class)
@RunWith 어노테이션은 JUnit 프레임워크가 테스트를 실행할 때 내장된 Runner를 실행한다.
JUnit SpringJUnit4ClassRunner 클래스를 상속받고 있어 @SpringBootTest 어노테이션을 사용하려면 필수이다.
참고
JUnit5를 사용하면 스프링에서 해당 문제는 내부적으로 해결하여 @RunWith 어노테이션을 사용하지 않아도 된다.
728x90
반응형