-
카테고리
-
해결 여부
미해결
빈 직접 등록 후 테스트 하는 방법
24.01.12 10:50 작성 조회수 120
0
안녕하세요, 김영한 강사님의 스프링 입문 강의를 들으면서 같이 코딩하는 중인데 여쭈어 보고 싶은 것이 있습니다.
빈을 직접 SpringConfig에 등록했고, Service나 Repository에서 @Service, @Repository 등등 어노테이션을 제거까지는 잘 따라했습니다. 강사님이 친절하게 알려주셨기 때문에 서버도 잘 돌아가고 있습니다.
문제는 전에 했던 MemberServiceTest에서 테스트를 돌릴 때 NullPoint 오류가 뜨고 있습니다.
훨씬 전에 했던 MemoryMemberRepositoryTest 클래스에선 아래처럼 등록했기에 오류가 없었습니다.
MemoryMemberRepository memberRepository = new MemoryMemberRepository();
만약 직접 빈을 등록 한 뒤 테스트를 돌려보려면 memberService나 memberRepository는 위처럼 new 로 생성해주어야 하나요??
class MemberServiceTest {
MemberService memberService;
MemoryMemberRepository memberRepository;
... -> 테스트 코드
}
답변을 작성해보세요.
0
인프런 AI 인턴
2024.01.13
안녕하세요, 인프런 AI 인턴입니다.
유승범님의 질문에 답변드리겠습니다.
빈을 직접 등록한 후 테스트를 수행하려면, 각 테스트 케이스에서 필요한 빈들을 제대로 생성하고 주입해야 합니다. 유승범님께서 이전에 수행했던 MemoryMemberRepositoryTest
에서 MemoryMemberRepository
를 직접 생성한 것처럼, 단위 테스트에서는 필요한 객체를 직접 만들어 사용하곤 합니다.
그러나 스프링 부트를 사용하는 경우, 통합 테스트 또는 @SpringBootTest
와 같은 상위 레벨의 테스트 어노테이션을 사용한 테스트에서는 스프링 컨테이너가 관리하는 빈을 주입받아 사용할 수 있습니다. 이 경우, 스프링 컨테이너에서 생성된 빈을 자동으로 주입받아 사용하므로, new
를 사용하지 않고도 빈을 사용할 수 있습니다.
만약 MemberService
클래스와 MemoryMemberRepository
클래스를 테스트하고자 하신다면, 스프링 테스트 관련 어노테이션을 사용하여 빈을 주입받는 방법이 있습니다. 예를 들어, @SpringBootTest
를 사용하여 스프링 테스트 컨텍스트 프레임워크를 이용하고, @Autowired
등으로 필요한 빈을 주입받아 사용할 수 있습니다. 또는, @TestConfiguration
을 사용하여 테스트에 필요한 추가적인 설정을 제공할 수도 있습니다.
스프링 부트의 문서에서는 테스트 시 특정 빈을 모킹(Mocking)하는 방법에 대해 설명하고 있습니다. @MockBean
어노테이션을 사용하여 필요한 모킹 객체를 주입받을 수 있습니다. 이를 테스트 코드에 적용하면 다음과 같습니다:
@SpringBootTest
class MemberServiceTest {
@Autowired
MemberService memberService;
@MockBean
MemoryMemberRepository memberRepository;
// ... 테스트 코드
}
위 코드와 같이 @SpringBootTest
를 클래스 레벨에 선언하고, @Autowired
를 사용하여 테스트하고 싶은 서비스를 주입받고, @MockBean
을 사용하여 모킹할 객체를 주입받아 테스트를 진행할 수 있습니다.
자세한 내용은 스프링 부트 레퍼런스 문서를 참조하시기 바랍니다. Spring Boot Reference Documentation v3.1.5 - Testing Spring Boot Applications - Mocking and Spying Beans
만약 테스트 중인 컨텍스트에 추가 설정이 필요하다면, @TestConfiguration
을 사용하는 방법도 있습니다.
이외에도, 스프링 테스트에 대해서 자세히 알고 싶으시다면, spring-test
모듈에 관한 Spring Framework reference documentation 부분도 함께 읽어보시기를 추천드립니다.
답변 1