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),
);
}