Home Junit 예외 검증하기
Post
Cancel

Junit 예외 검증하기


AS-IS

인덱스로 하나하나 꺼내여 검증

기존에는 아래와 같이 하나하나 꺼내여 검증을 하니 assertThat메소드도 불필요하게 많이 사용하게 되었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@DisplayName("럭키즈에서 저장해둔 미션들을 가져온다.")
@Test
void getLuckMissions() {
    IntStream.rangeClosed(1, 5).forEach(i -> {
        luckkidsMissionRepository.save(createLuckkidsMission("테스트미션" + i, LocalTime.of(i, 0)));
    });

    List<LuckkidsMissionResponse> luckkidsMissionResponses = luckkidsMissionReadService.getLuckMissions();

    assertThat(luckkidsMissionResponses).hasSize(5); // 총 5개의 미션이 저장되었는지 확인

    for (LuckkidsMissionResponse response : luckkidsMissionResponses) {
        assertThat(response.getMissionType()).isEqualTo(MissionType.HEALTH);
        assertThat(response.getMissionDescription()).isEqualTo("테스트미션" + (i + 1));
        assertThat(response.getAlertTime()).isEqualTo(LocalTime.of(i + 1, 0));
        assertThat(response.getSort()).isEqualTo(1);
    }
}

TO-BE

Tuple로 감싸고 extracting으로 검증 할 필드들을 명시 containsExactlyInAnyOrder로 순서까지 검증

위에 문제를 해결하기 위해 extracting으로 리스트에서 검증 할 필드를 명시해주고 containsExactlyInAnyOrder로 객체들의 순서까지 보장하고 Tuple로 묶어 검증하도록 개선하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@DisplayName("럭키즈에서 저장해둔 미션들을 가져온다.")
@Test
void getLuckMissions() {
    IntStream.rangeClosed(1, 5).forEach(i -> {
        luckkidsMissionRepository.save(createLuckkidsMission("테스트미션" + i, LocalTime.of(i, 0)));
    });

    List<LuckkidsMissionResponse> luckkidsMissionResponses = luckkidsMissionReadService.getLuckMissions();

    assertThat(luckkidsMissionResponses).hasSize(10)
            .extracting("missionType", "missionDescription", "alertTime", "sort")
            .containsExactlyInAnyOrder(
                    tuple(MissionType.HEALTH, "테스트미션1", LocalTime.of(1, 0), 1),
                    tuple(MissionType.HEALTH, "테스트미션2", LocalTime.of(2, 0), 1),
                    tuple(MissionType.HEALTH, "테스트미션3", LocalTime.of(3, 0), 1),
                    tuple(MissionType.HEALTH, "테스트미션4", LocalTime.of(4, 0), 1),
                    tuple(MissionType.HEALTH, "테스트미션5", LocalTime.of(5, 0), 
            );
}
This post is licensed under CC BY 4.0 by the author.