@Mock객체를 사용해서 Page타입 객체 테스트코드 작성하기
2021. 7. 29. 13:34ㆍSpring
Mock을 사용해서 Page타입 테스트 코드 작성하기
Page타입을 어떻게 테스트 코드를 짜야할까..?
- @Mock 객체는 빈 껍데기에 불과하기 때문에 @Mock객체에서 실행되는 메서드의 결과값을 미리 선언해둬야한다. → 이 부분 때문에 Page타입의 리턴값을 어떻게 미리 작성을 해야할까 라는 의문이 되었다...!!!
단위 테스트를 하고 싶은 곳은 어디인가
- Service단에서 매개변수로 받은 데이터로 Repository에서 잘 데이터가 가공되서 넘어오는지를 검사하고 싶었다.
-
Repository에서 호출할 메서드이다. 리턴타입이 Page 이기 때문에 이거에 대한 결과값을 미리 선언을 해야한다.devicePacketLogRepository.findAllByDeviceIdentityAndIdLessThanAndCreationDateTimeBetweenOrderByCreationDateTimeDesc(deviceIdentity, packetListLastId, fromDateTime, toDateTime, pageRequest);
@Mock 객체를 사용해서 테스트 해보자
- 일단 저는 tdd로 테스를 진행하기 때문에 이 글을 보시는 분들은 참고 해주세요 :)
//given
Long LASTID = 9007199254740991L;
Car car = new Car(4372L, LocalDateTime.now(), LocalDateTime.now(), "0B0240", "0B0240", "11거111", null, "000001971268552", LocalDate.now(), LocalDate.now(), null, null, (short) 2012, 1L, 4L, false, false, null);
DevicePacketLog devicePacketLog = new DevicePacketLog("000001971268552", PacketType.KEEP_ALIVE, LocalDateTime.of(2021,07,27,17,44,01));
LocalDateTime fromDateTime = devicePacketLog.getCreationDateTime().minusDays(7);
LocalDateTime toDateTime = devicePacketLog.getCreationDateTime();
- 필요한 객체와 데이터들을 생성했습니다.
PageRequest pageRequest = PageRequest.of(0, 5);
List<DevicePacketLog> devicePacketLogList = new ArrayList<>();
DevicePacketLog log1 = new DevicePacketLog("000001971268552", PacketType.RT, LocalDateTime.of(2021,07,27,17,44,01));
DevicePacketLog log2 = new DevicePacketLog("000001971268552", PacketType.KEEP_ALIVE, LocalDateTime.of(2021,07,27,17,40,11));
DevicePacketLog log3 = new DevicePacketLog("000001971268552", PacketType.RT, LocalDateTime.of(2021,07,27,17,38,01));
DevicePacketLog log4 = new DevicePacketLog("000001971268552", PacketType.GPS_POSITION, LocalDateTime.of(2021,07,27,16,44,01));
DevicePacketLog log5 = new DevicePacketLog("000001971268552", PacketType.RT, LocalDateTime.of(2021,07,27,04,44,01));
devicePacketLogList.add(log1);
devicePacketLogList.add(log2);
devicePacketLogList.add(log3);
devicePacketLogList.add(log4);
devicePacketLogList.add(log5);
- 이 부분에서 이제 Page객체를 만들기 위한 작업을 합니다.( 사실 이렇게 데이터를 일일히 작성하는게 맞나요..? 과감히 의견주세요.. 여러분들 😢)
Page<DevicePacketLog> responsePages = new PageImpl<>(devicePacketLogList);
- 여기가 핵심인데요!!!
List<DevicePacketLog> devicePacketLogList = new ArrayList<>();
를 위에 있는 코드에 넣어줍니다.
여기서 알아봐야할 게new PageImpl<>
이 무슨 코드인가???-
Creates a new PageImpl with the given content. This will result in the created Page being identical to the entire List.public PageImpl(List<T> content) { this(content, Pageable.unpaged(), null == content ? 0 : content.size()); }
Params: content – must not be null.- 주어진 내용으로 새로운 PageImpl을 생성한다. 이렇게 하면 생성된 페이지가 전체 목록과 동일하게 된다. Parm은 null이 아니어야한다.
-
- 그런 다음
given(devicePacketLogRepository.findAllByDeviceIdentityAndIdLessThanAndCreationDateTimeBetweenOrderByCreationDateTimeDesc(car.getDeviceIdentity(), LASTID, fromDateTime, toDateTime, pageRequest)).willReturn(responsePages);
이렇게 이 메서드가 실행하면 이걸 반환해줘!! 라고 코드를 작성하면 됩니다.
참고사이트
'Spring' 카테고리의 다른 글
[Spring] BDDMockito VS Mockito (0) | 2021.08.12 |
---|---|
[Spring] TDD VS BDD (0) | 2021.08.12 |
[Spring Boot] Spring Auditing 적용해보기 (0) | 2021.06.02 |
[Spring Boot] 이메일 보내기 (0) | 2021.06.02 |
[Spring Boot] @Validation Exception 처리하기 (0) | 2021.06.02 |