gpt4 book ai didi

java - 对 ExceptionHandler 类进行单元测试

转载 作者:行者123 更新时间:2023-12-01 18:01:11 24 4
gpt4 key购买 nike

我正在尝试为 ExceptionHandler 类编写单元测试,但我不是 100% 确定如何进行。我正在努力弄清楚如何使用错误列表设置 MethodArgumentNotValidException 类?

@ControllerAdvice
public class InputExceptionHandler extends ResponseEntityExceptionHandler {

private static final String INVALID_CHARACTER_MESSAGE = "Fields contain invalid characters:";

@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {

final List<String> errorList = getErrorList(ex);
final StringBuilder errorMessage = new StringBuilder(popFirstError(errorList));
if(errorMessage.toString().contains(INVALID_CHARACTER_MESSAGE)) {
combineDuplicateErrorMessage(errorList, errorMessage);
}
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(makeBankDetailsValidationModel(errorMessage.toString()));
}

private BankDetailsValidationModel makeBankDetailsValidationModel(String validationErrorDescription){
return new BankDetailsValidationModel(false, false, validationErrorDescription, "");
}

private StringBuilder combineDuplicateErrorMessage(List<String> errorList, StringBuilder errorMessage) {
return errorList.stream()
.filter(value -> value.contains(INVALID_CHARACTER_MESSAGE))
.findFirst()
.map(value -> errorMessage.append(", ").append(value.substring(35)))
.orElse(null);
}

private String popFirstError(List<String> errorMessages) {
final String message = errorMessages.get(0);
errorMessages.remove(0);
return message;
}

private List<String> getErrorList(MethodArgumentNotValidException ex) {
return ex.getBindingResult()
.getAllErrors()
.stream()
.map(ObjectError::getDefaultMessage)
.sorted()
.collect(Collectors.toCollection(ArrayList::new));
}
}

最佳答案

既然您只是测试处理程序而不是调用(这是 Sping 的工作),为什么不只使用模拟异常呢。

这样你就可以模拟你的异常需要覆盖所有路径的任何属性,而不必首先想出创建异常的方法......

关于java - 对 ExceptionHandler 类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60622863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com