Spring Boot/Test Code

Junit5] 테스트 코드 작성을 위한 서비스 코드 리팩토링

나른한 찰리 2023. 7. 14. 18:46
반응형

작성하는 내용은 저의 주관적인 의견이 반영된 내용입니다.

 

1. Service class에서 return 값을 DTO 객체 대신 특정 값으로 보내기(int 등)

  • 기존에 코드를 작성했던 방식

Service 코드 중 일부

/* 채팅방 생성 */
public CreateRoomSuccessDto createRoom(RoomDto roomDto) {
    // Dto -> Entity
    Room room = roomDto.toRoom();

    // save db
    try {
        room.setRoomId(roomReqDto.getRoomId()); // Assign a value to the ID field manually
        roomRepository.save(room);
    } catch (Exception e) {
        throw new CustomException(SERVER_ERROR);
    }

    return CreateRoomSuccessDto.builder()
            .status(201)
            .message(roomDto.getRoomId() + " 방이 정상적으로 생성되었습니다")
            .build();
}

 

Controller 코드 중 일부

@PostMapping(value = "/room", produces = MediaType.APPLICATION_JSON_VALUE)
public CreateRoomSuccessDto createRoom(@Valid @RequestBody RoomDto roomDto) {
    return roomService.createRoom(roomDto);
}

 

코드 수정 후

  • Controller, Service의 역할을 명확하게 분리할 수 있다. 

Service 코드 중 일부

    public int createRoom(RoomReqDto roomReqDto) {
        // Dto -> Entity
        Room room = roomReqDto.toRoom();

        // save db
        try {
            room.setRoomId(roomReqDto.getRoomId()); // Assign a value to the ID field manually
            roomRepository.save(room);
        } catch (Exception e) {
            return HttpStatus.INTERNAL_SERVER_ERROR.value();
        }

        return HttpStatus.CREATED.value();
    }

 

Controller 코드 중 일부

@PostMapping(value = "/room", produces = MediaType.APPLICATION_JSON_VALUE)
public RoomRespDto createRoom(@Valid @RequestBody RoomReqDto roomReqDto) {

    int result = roomService.createRoom(roomReqDto);
    String roomId = roomReqDto.getRoomId();

    if (result == HttpStatus.CREATED.value()) {
        return RoomRespDto.builder()
                .status(result)
                .message("방이 정상적으로 생성되었습니다")
                .data(roomId)
                .build();
    } else {
        throw new CustomException(SERVER_ERROR);
    }
}

 

 

 

 

참고 링크

 

 

반응형