본문 바로가기

Spring

[Spring, QueryDSL]기본 테스트 데이터 생성

TestInitData 클래스는 BeforeEach를 대신하여 Test를 실행할 때마다 새로운 테스트 데이터를 생성하는 클래스이다. → 초반 데이터를 관리할 수 있는 클래스

TestInitData 클래스를 사용하는 이유?

BeforeAll를 사용하게 된다면 테스트 클래스를 생성할 때마다 새로운 BaforeAll 메서드를 생성해야 한다.

어떠한 테스트를 실행하건 최초 한번만 세팅해야 하는 데이터를 미리 만들어 두기 위해 사용한다.

→ 공통의 테스트 데이터는 TestInitData를 사용하고, 각각의 클래스에서 추가해야 할 테스트 데이터는 BeforeEach로 사용한다.

 

코드를 보자.

@Configuration
@Profile("test") // 이 클래스가 정의된 Bean들은 test모드에서만 활성화
public class TestInitData {
    // CommandLineRunner : 주로 앱 실행 직후 초기데이터 세팅 및 초기화에 사용 -> 알아서 나중에 실행됨
    @Bean
    CommandLineRunner init(UserRepository userRepository) {
        return args -> {
            SiteUser u1 = SiteUser.builder()
                    .username("user1")
                    .password("{noop}1234")
                    .email("user1@test.com")
                    .build();
            SiteUser u2 = new SiteUser(null, "user2", "{noop}1234", "user2@test.com");

            userRepository.saveAll(Arrays.asList(u1, u2));
        };
    }
}

두번째 줄의 @Profile(”test”)는 이 클래스의 Bean은 test모드에서만 활성된다.

CommandLineRunner은 앱 실행 직후 초기 데이터를 세팅하고 초기화 해준다.

→ BeforeAll과 같다고 생각한다.

 

그 아래의 코드는 새로운 User를 만드는 것으로 Test진행 시 User1과 User2가 생성된다.

@ActiveProfiles("test") // 테스트 모드 활성화

Test 모드 활성화를 위해 꼭 위의 코드가 필요하고, 위의 코드가 붙어 Test모드가 활성화 되어있을 경우 @Profile(”test”)가 붙은 클래스의 Bean이 실행된다.

 

테스트해보자.

@Test
@DisplayName("회원 생성")
void t1() {
	SiteUser u3 = SiteUser.builder()
			.username("user3")
			.password("{noop}1234")
			.email("user3@test.com")
			.build();
	SiteUser u4 = new SiteUser(null, "user4", "{noop}1234", "user4@test.com");

	userRepository.saveAll(Arrays.asList(u3, u4));
}

새로운 user3과 user4를 만든다. 그 전 CommandLineRunner을 먼저 실행 후 이 테스트가 진행된다는 것을 알 수 있다.

'Spring' 카테고리의 다른 글

[JAVA] JAR과 WAR  (0) 2023.02.06
[Spring]QueryDSL 적용하기  (0) 2022.08.29
[Spring]기능 - 검색  (0) 2022.08.25
[Spring]기능 - 앵커(anchor)  (0) 2022.08.23
[Spring]기능 - 추천 기능  (0) 2022.08.23