2

标题解释我的问题100%。假设Spring Boot/MVC中有注释类@ControllerAdvice。在我的情况下,它包含@ExceptionHandler注释。好的,我可以对这个类进行单元测试(它将从Exception类的信息中返回格式化的JSON)。这很简单 - 特别是在使用Spock时。如何在春季控制器建议集成测试

但是集成测试呢?测试我的Spring库是否正确的唯一方法是创建仅存在用于测试目的的控制器,并向它添加一些方法,例如。抛出特定种类的异常,看看它是否返回我设计的@ControllerAdvice返回。但它看起来很丑陋 - 仅为测试现有代码创建额外的代码。

所以我的问题是 - 你如何做@ControllerAdvice集成测试?你只是不这样做,创建专门的控制器只测试@ControllerAdvice或只是测试它使用现有的控制器提供例如错误的数据,将导致异常被抛出(在我的情况下,如果它是@InitBinder方法,我们将检查ModelAndView )?

回答

0

对于Spring框架的集成测试的测试应做到以下几点:

  • 实例化应用程序上下文。在你的情况下,应用程序上下文必须包含控制器和控制建议
  • 就由控制器定义的HTTP端点的请求
  • 断言结果

您可以在集成测试的更多细节这里的春天:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#spring-mvc-test-framework

+0

我知道,但在你的解决方案中有涉及的控制器。我的问题是 - 我应该创建单独的控制器来测试@ControllerAdvice类或使用现有的? – Chlebik

+0

我不会创建一个仅用于测试建议的新控制器,为什么不使用现有的控制器?通过这种方式,您可以测试意图在应用程序中工作的实际流程。 –

+0

我们假设我想测试ValidationException的处理程序。当我尝试访问外部系统,获取一些数据,然后创建一个对象并验证它时,我的应用程序中唯一产生这个异常的地方就是生成的。它主要通过'@ Service' bean来完成。那么您如何建议在集成测试期间使用现有控制器来模拟这种情况? – Chlebik