인프런 커뮤니티 질문&답변
@SpringBootTest 없이 테스트 못돌리나여??
해결된 질문
작성
·
1.6K
1

안녕하세요!
다름이 아니라 @SpringBootTest 어노테이션은 통합 테스트를 위해 사용하는 어노테이션인 것으로 아는데 어노테이션을 지우면 NPE가 뜨더라구요. @configuration으로 설정하지 않아서 그런걸까요?
뭔가 알쏭달쏭해서 질문 남깁니다. 좋은 강의 감사합니다!
답변 1
0
안녕하세요. nameks님, 공식 서포터즈 OMG입니다.
@SpringBootTest를 작성하지 않을 경우 스프링 컨테이너가 실행되지 않습니다.
그리하여
스프링으로부터 memberRepository를 주입받지 못하기 때문에 NPE가 발생하는 것입니다.
@SpringBootTest를 이용한 스프링 통합테스트의 실행이 단위테스트에 비해 느리다는 말을 들어보셨나요? @SpringBootTest는 스프링 컨테이너를 띄워야하기 때문에 시간이 소요되어 단위테스트에 비해 느린 것입니다.
아래 정리된 글도 읽어보시면 도움 되실꺼에요
참고)
1.입문편에서 한 테스트는 @SpringBootTest 어노테이션이 없었는데 그건 @Autowired를 사용하지 않고 직접 인스턴스를 생성해서 되는건가요??
A. 네 맞습니다
MemoryMemberRepositoryTest
MemberServiceTest
MemberServiceIntegrationTest
2.
MemberRepository를 테스트 클래스 안에서 new 연산자로 생성하면 EntityManager가 null이라고 뜨던데 그건 왜 그런건가요?
A.
EntityManager는 인터페이스인데 어떻게 코드를 작성하셨을까요?
작성하신 코드에 대한 화면 캡쳐와 그렇게 테스트하신 이유에 대해 설명해주시면 답변드리기에 도움이 될거같네요
스프링으로부터 주입을 받아야 하는데, @SpringBootTest를 주석처리하여 스프링 컨테이너가 띄워지지 않아 발생하는 문제입니다.
참고)
https://velog.io/@koo8624/Spring-EntityManager








입문편에서 한 테스트는 @SpringBootTest 어노테이션이 없었는데 그건 @Autowired를 사용하지 않고 직접 인스턴스를 생성해서 되는건가요??
MemberRepository를 테스트 클래스 안에서 new 연산자로 생성하면 EntityManager가 null이라고 뜨던데 그건 왜 그런건가요?
늦은 시각에 답변 감사합니다!