빈 직접 등록 후 테스트 하는 방법

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;
... -> 테스트 코드
}

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 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 부분도 함께 읽어보시기를 추천드립니다.