Spring | Test Case 에서 JPAQueryFactory 에러 발생!!

DoItDev·2021년 8월 4일
0
post-thumbnail

오류의 원인

프로젝트에서 querydsl 을 설정을 해주고 test case 을 작성하였다.
그러면서 test case 작성도중 jpaqueryfactory 가 bean 주입을 받지 못하면서 에러가 발생이 되었다.
에러의 원인은 아래와 같다

No qualifying bean of type 'com.querydsl.jpa.impl.JPAQueryFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

해결 방법

test config class 를 하나 만들어서 주입을 시켜준다.
@TestConfiguration , @PersistenceContext 두개의 어노테이션을 작성을 해준다

@TestConfiguration : test case 작정시 설정을 주입 시켜주는 어노테이션
@PersistenceContext : 이 어노테이션을 통해서 EntityManager 영속성을 주입시켜준다.

@TestConfiguration
public class TestConfig {

    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public JPAQueryFactory jpaQueryFactory(){
        return new JPAQueryFactory(entityManager);
    }

}

test case class 인데 @Import(TestConfig.class) 임포트 어노테이션으로 다음과 같이 사용을 하면 설정 클래스를 주입 시켜줄 수 있다.

@DataJpaTest
@ExtendWith(SpringExtension.class)
@DisplayName("app_user_test_case")
@ActiveProfiles("mysql")
@Import(TestConfig.class)
class AppUserRepositoryTest {

    @Autowired
    private AppUserRepository appUserRepository;

    private final String userName = "test1";

    @BeforeEach
    public void beforeEach() {
        AppUser data = AppUser.builder()
                .firstName(userName)
                .lastName(userName)
                .email(userName)
                .gender(userName)
                .count(new BigDecimal(0))
                .build();
        appUserRepository.save(data);
    }

    @Test
    @DisplayName("find all test case")
    public void findAll() {
        List<AppUser> appUserList = appUserRepository.findAll();

        appUserList.stream()
                .filter(user -> userName.equals(user.getFirstName()))
                .findFirst()
                .ifPresent(value -> {
                    Assertions.assertEquals(value.getFirstName(), userName);
                });
    }

}
profile
Back-End Engineer

0개의 댓글