Querydsl 슬라이스 테스트 코드 작성 방법

yeom yaloo·2024년 2월 26일
0

트러블 슈팅

목록 보기
1/5

슬라이스 테스트

[슬라이스 테스트]

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() {
    	//given
        account = DummyAccount.dummy();
        //여기서 이제 실제 구현체를 생성해줘서 해당 작업을 진행하는 방법
        testQueryAccountRepository = new QueryAccountRepositoryImpl(jpaQueryFactory);
    }

    @Test
    void queryFindAccountByLoginId() {
        //given

        //when
        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() {
        //given

        //when
        Optional<AccountDTO> op = testQueryAccountRepository.queryFindAccountByLoginId("test");

        Assertions.assertThat(op.isEmpty()).isFalse();

    }

}
profile
즐겁고 괴로운 개발😎

0개의 댓글