슬라이스 테스트
[슬라이스 테스트]
1. 슬라이스 테스트란 무엇인가?
2. 슬라이스 테스트를 해야 하는 이유
3. 슬라이스 테스트를 지원하고 있는 것들
Querydsl 레포지토리 슬라이스 테스트
[방법 1]
1. Test configuration
package com.fisa.infra.config;
@TestConfiguration
public class QuerydslTestConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory(){
return new JPAQueryFactory(this.entityManager);
}
}
- 테스트 작업을 위한 설정 파일은 테스트 디렉토리 하위에 놓아주셔야 합니다.
- 해당 작업에서는 따로 repository에 대한 빈 등록이 없기 때문에 그 작업을 따로 테스트 코드 내에서 진행해야 합니다.
2. Test
- 해당 방법은 아예 테스트 설정 파일 안에서 레포지토리를 @Bean으로 만들어주는 방법입니다.
package com.fisa.infra.account.repository.querydsl;
import java.util.Optional;
import static org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace.NONE;
@AutoConfigureTestDatabase(replace = NONE)
@Import(QuerydslTestConfig.class)
@DataJpaTest
class QueryAccountRepositoryImplTest {
private QueryAccountRepository testQueryAccountRepository;
@Autowired
private JPAQueryFactory jpaQueryFactory;
private Account account;
@BeforeEach
void setUp() {
account = DummyAccount.dummy();
testQueryAccountRepository = new QueryAccountRepositoryImpl(jpaQueryFactory);
}
@Test
void queryFindAccountByLoginId() {
Optional<AccountDTO> op = testQueryAccountRepository.queryFindAccountByLoginId("test");
Assertions.assertThat(op.isEmpty()).isFalse();
}
}
- 또한 해당 configuration 파일을 사용하기 위해서는
@Import(TestConfig.class)
를 이용해주어야 합니다.
[방법 2]
1. Test Configuration
package com.fisa.infra.config;
@TestConfiguration
public class QuerydslTestConfig {
@PersistenceContext
private EntityManager entityManager;
@Bean
public QueryAccountRepositoryImpl testQueryAccountRepository() {
return new QueryAccountRepositoryImpl(new JPAQueryFactory(entityManager));
}
}
2. Test
package com.fisa.infra.account.repository.querydsl;
@AutoConfigureTestDatabase(replace = NONE)
@Import(QuerydslTestConfig.class)
@DataJpaTest
class QueryAccountRepositoryImplTest {
@Autowired
private QueryAccountRepository testQueryAccountRepository;
private Account account;
@BeforeEach
void setUp() {
account = DummyAccount.dummy();
}
@Test
void queryFindAccountByLoginId() {
Optional<AccountDTO> op = testQueryAccountRepository.queryFindAccountByLoginId("test");
Assertions.assertThat(op.isEmpty()).isFalse();
}
}