TIL 2023-12-28 doThrow

장규빈·2023년 12월 28일

TIL

목록 보기
54/59
post-thumbnail

사용 계기

@WebMvcTest 단위 테스트를 진행하던 도중 void타입의 컨트롤러에서 에러를 발생시킬때 사용하였다.

사용방법

컨트롤러

    @PostMapping("/{boardId}")
    public ResponseEntity<?> createLists(@PathVariable(name = "boardId") Long id,@RequestBody
        CreateListsRequest request) {
        listsService.createLists(id,request);
        return ResponseEntity.ok(
            RootResponse.builder()
                .status("200")
                .msg("리스트 저장에 성공했습니다.")
                .build()
        );
    }

서비스

    @Override
    @Transactional
    public void createLists(Long id, CreateListsRequest request) {
        if (!boardService.boardCheck(id)) {
            throw new ServiceException(NOT_EXIST_LIST);
        }
        long order = repository.countByBoardId(id);

        Lists lists = Lists.builder().boardId(id).name(request.name()).order((order+1)).build();
        Lists response = repository.save(lists);
    }

실패 테스트(doThrow)

        @DisplayName("리스트 생성 실패")
        @Test
        void create_lists_fail_1() throws Exception {
            //given
            CreateListsRequest request = new CreateListsRequest("첫번째");
            //when
            doThrow(new ServiceException(NOT_EXIST_LIST)).when(listsService)
                .createLists(1L, request);
            //then
            mockMvc.perform(post("/api/lists/1")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(objectMapper.writeValueAsString(request))
                )
                .andDo(print())
                .andExpectAll(
                    status().isBadRequest(),
                    jsonPath("$.status").value("3000"),
                    jsonPath("$.msg").value("리스트가 없습니다.")
                );
        }
profile
나다운사람

0개의 댓글