@DataJpaTest

@DataJpaTest 환경에서는 @Repository만 주입 대상이 된다.

@ActiveProfiles("test") // yml 파일에 on-profile : test 기반으로 작동
//@SpringBootTest
@DataJpaTest
class ProductRepositoryTest {
    
    private final ProductRepositoryImpl productRepositoryImpl;


방법 1. @SpringBootTest로 전환 (모든 빈 등록됨)

@SpringBootTest
@ActiveProfiles("test")
class ProductRepositoryTest {
    @Autowired
    private ProductRepository productRepository;
}

⚠️ 단점: 전체 애플리케이션 컨텍스트를 로딩하므로 테스트 속도가 느릴 수 있음


방법 2. 인터페이스 기반 주입으로 변경

@Autowired
private ProductRepository productRepository;

이렇게 하면 Spring이 ProductRepositoryImpl을 자동으로 주입해줍니다. 단, 이 방식도 ProductRepositoryImpl이 스프링 빈으로 등록되어 있어야 하고 @Import 없이는 @DataJpaTest 환경에서 불가능합니다.

@ActiveProfiles("test") // yml 파일에 on-profile : test 기반으로 작동
//@SpringBootTest
@DataJpaTest
@Import(ProductRepositoryImpl.class)
class ProductRepositoryTest {

    @Autowired
    private ProductRepository productRepository;

명시적으로 붙여줘서 해결하였다.

Last updated