본문 바로가기

Java, JavaScript/Spring Boot

[Spring Boot] @Autowired를 사용하지 않고 Bean 가져오기

728x90

Test 코드를 작성할 때 @Autowired와 @SpringBootTest를 사용하지 않고 테스트할 수 있는 방법에 대해서 알아보겠습니다.

 

우선, AutoAppConfig class를 프로젝트 최상단에 생성하여주고 @Configuration, @ComponentScan 어노테이션을 추가해줍니다. 코드는 다음과 같습니다.

 

@Configuration
@ComponentScan
public class AutoAppConfig {

}

 

@ComponentScan을 사용하면 @Component가 어노테이션이 있는 것들을 Spring Bean으로 자동으로 등록해줍니다. @Component는 @Service, @Repository에 모두 추가되어 있습니다.

 

준비가 완료되었으니 테스트 코드를 작성하면 됩니다. TestService가 구현되었다는 것을 가정하겠습니다.

 

...

public class TestServiceTest {

    ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
    private final TestService testService = ac.getBean(PetService.class);

    @Test
    @DisplayName("빈 이름으로 조회")
    void findBeanByName() {
        TestService testService = ac.getBean("testService", TestService.class);
        assertThat(testService).isInstanceOf(TestService.class);
    }
}

 

위의 코드처럼 getBean("빈 이름", 빈 타입)을 실행하면 스프링 빈에 등록된 TestService가 반환되게 됩니다. 따라서 @SpringBootTest와 @Annotation을 사용하지 않아도 테스트를 진행할 수 있게 됩니다.

728x90