【问题标题】:How can I make to throw this catch with JUnit我怎样才能用 JUnit 抛出这个问题
【发布时间】:2019-09-18 10:35:44
【问题描述】:

我有一个函数可以更新 jira 中的问题,我想使用 JUnit 抛出问题。

这是我得到的功能:

@PutMapping (value = "/update/{issueKey}")
    public ResponseEntity<ResponseDTO>
           updateIssue(@Validated @RequestBody EventDTO eventDTO, BindingResult result, @PathVariable String issueKey)
    {
        logger.info("Entra en /update con el payload: {}", eventDTO);

        if (result.hasErrors())
        {
            ErrorResponseDTO errorResponseDTO = ErrorResponseDTO.getErrorResponseDTOFromBinding(result, messageSource);
            return new ResponseEntity<>(errorResponseDTO, HttpStatus.BAD_REQUEST);
        }
        try
        {
            SuccessResponseDTO successResponseDTO = jiraService.update(eventDTO, issueKey);
            logger.info("/update response {} ", successResponseDTO);
            return new ResponseEntity<>(successResponseDTO, HttpStatus.OK);
        }
        catch (EywaException eywaException)
        {
            logger.error("Se ha producido un error en actualizar un issue", eywaException);
            ErrorResponseDTO responseDTO = new ErrorResponseDTO();


            String errorMessage = messageSource.getMessage(eywaException.getMessage(), null,
                    LocaleContextHolder.getLocale());
            responseDTO.addErrorResponseDTO(eywaException.getMessage().split("\\.")[0], errorMessage);
            return new ResponseEntity<>(responseDTO, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

这就是我在 JUnit 中所拥有的

@Test
    public void updateIssue_NonExistanceIssue_shouldReturnFail() throws Exception
    {
        when(jiraService.update(eventDTO, "")).thenReturn(successResponseDTO);

        String json = "{\"summary\":\""+eventDTO.getSummary()+"\""+
                ", \"description\":\""+eventDTO.getDescription()+"\""+
                ", \"raised\":\""+eventDTO.getRaised()+"\""+
                ", \"issueType\":\""+eventDTO.getIssueType()+"\""+
                ", \"priority\":\""+eventDTO.getPriority()+"\""+
                ", \"issuesubType\":\""+eventDTO.getIssuesubType()+"\""+
                ", \"region\":\""+eventDTO.getRegion()+"\""+
                ", \"airport\":\""+eventDTO.getAirport()+"\""+"}";

        mvc.perform(put(BASE + UPDATE.replaceAll("\\{.*\\}", ""))
                .contentType(MediaType.APPLICATION_JSON)
                .content(json))
                .andExpect(status().isInternalServerError());

    }

(我已经在设置中创建了对象) 我得到的状态是 405,当我输入 issueKey 时,我得到了状态 200(即使问题密钥不存在)

它必须抛出状态 500

【问题讨论】:

    标签: java spring testing junit jira


    【解决方案1】:

    我认为在 JUnit 测试中你必须使用 .thenThrow(eywaException); 而不是 .thenReturn(successResponseDTO); 才能使测试通过异常并获得 500 状态

    【讨论】:

      【解决方案2】:

      我认为你的问题是路径变量。 终点是“/update/{issueKey}”,但在测试期间您调用“/update/”(?)。

      Spring 知道第一个端点,你调用第二个端点,spring 找不到这个端点并抛出 405 Method Not Allowed (You don't have PUT /update)。

      【讨论】:

      • 我之前尝试过输入问题密钥,但我没有得到 500,抱歉没有在帖子中提及这一点
      • 尝试从 put(..) 中删除 BASE 变量,spring 在内部调用它。 (基础是你的ip/localhost?)
      • BASE + UPDATE 是我发送的方向,我已经删除它,现在我得到了 404
      • 您是否也刚刚删除了 BASE 部分?因为405通常意味着找不到方法
      • 如果您可以向我们提供您的基本内容和更新内容。此外,您的控制器具有基本 url (RequestMapping("/something/") 尝试使用字符串进行测试,例如 mvc.perform(put("/update/SOMEID")) 或 mvc.perform(put("/something/update /SOMEID"))
      猜你喜欢
      • 2013-10-24
      • 1970-01-01
      • 2022-01-12
      • 2019-04-10
      • 1970-01-01
      • 2020-11-28
      • 2012-03-16
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多