首页 > 解决方案 > 如何对自定义异常执行 JUnit 测试

问题描述

我有一个自定义异常来处理我的程序的预期错误,这里是代码。

@ControllerAdvice
@RestController
public class DashboardException {

@ExceptionHandler({Exception.class, IOException.class, ParseException.class, JsonProcessingException.class})
public final ResponseEntity<ErrorDetails> dataNotFoundException(Exception ex, WebRequest request) {
    ErrorDetails errorDetails = new ErrorDetails();
    errorDetails.setTimestamp(new Date().toString());
    errorDetails.setMessage(ex.getMessage());
    errorDetails.setPath(request.getDescription(false));
    errorDetails.setStatus(HttpStatus.BAD_REQUEST.value());
    errorDetails.setError(HttpStatus.BAD_REQUEST);
    return new ResponseEntity<>(errorDetails, HttpStatus.BAD_REQUEST);
}
   }

我的问题是如何正确地对这个类进行单元测试。这是我到目前为止所做的,但没有运气。

 @RunWith(SpringJUnit4ClassRunner.class)

@WebAppConfiguration

@ContextConfiguration(classes = { DashboardException.class, TestConfiguration.class, DataController.class })
public class testDashboardException {

    private MockMvc mockMvc;

    @Autowired
    WebApplicationContext wac;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Configuration
      @EnableWebMvc
      public static class TestConfiguration { }

     @Controller
      @RequestMapping("/tests")
      public static class RestProcessingExceptionThrowingController {


        @GetMapping(value = "/exception")
        public @ResponseBody String find() throws Exception {
          throw new Exception("global_error_test");
        }
      }


      @Test
      public void testHandleException() throws Exception {
        mockMvc.perform(get("/tests/exception"))
            .andExpect(new ResultMatcher() {


              @Override
              public void match(MvcResult result) throws Exception {
                result.getResponse().getContentAsString().contains("global_error_test");
              }
            })
            .andExpect(status().isBadRequest());
      }

    /*
     * @Test public void testErrorDetailsValue() {
     * 
     * thrown.expect(Exception.class); thrown.expect(IOException.class);
     * thrown.expect(ParseException.class);
     * thrown.expect(JsonProcessingException.class);
     * 
     * thrown.expectMessage("Bad Request");
     * 
     * }
     */
}

我对自定义异常只有一点了解。我在这里想念什么?感谢您的任何帮助。

标签: java

解决方案


我发现了如何覆盖我的自定义异常。我刚刚在我的控制器上包含了一个测试,该测试将使端点失败,它确实捕获了一个异常并覆盖了我的自定义异常。


推荐阅读