프로젝트에서 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);
});
}
}