Будьте уверены + Макет MVC @ControllerAdvice

В моем проекте я использую Rest Assured MockMVC со следующей зависимостью:

<dependency>
    <groupId>com.jayway.restassured</groupId>
    <artifactId>spring-mock-mvc</artifactId>
    <version>2.9.0</version>
</dependency>

И мой тестовый класс выглядит так:

TestController testController = new TestController();
@Before
public void configureRestAssuredForController() {
    RestAssuredMockMvc.standaloneSetup(testController);
}

У меня есть несколько ExceptionHandlers, определенных в классе контроллера. В моих тестах JUnit я мог проверять пути запросов и обработчики, когда они определены в классе контроллера.

Однако - когда я переместил обработчики в отдельный класс с@ControllerAdviceобработчики не вызываются из тестов.

Я понял, что это связано с автономной настройкой контроллера, который, вероятно, не может загружать обработчики, определенные в другом классе.

Но я не мог понять, как добавить обработчики исключений в RestAssuredMockMvc в автономном режиме, чтобы это работало.

Я изо всех сил, и любая помощь очень ценится, пожалуйста.

 Wtower26 июн. 2016 г., 08:05
Добро пожаловать в переполнение стека! Я отредактировал ваш вопрос, чтобы сделать отступ для примера кода на 4 пробела, чтобы он отображался правильно - см. Справку по редактированию для получения дополнительной информации о форматировании. Пожалуйста, внесите изменения, чтобы предоставить дополнительную информацию, необходимую для определения конкретной проблемы. Удачи!

Ответы на вопрос(2)

Решение Вопроса

На основеэтот ответ Я создал решение, которое отлично работает для меня:

/**
 * Initializes GlobalExceptionHandler advice using the StaticApplicationContext with the single bean.
 *
 * @return HandlerExceptionResolver instantiated based on the GlobalExceptionHandler
 */
private HandlerExceptionResolver initGlobalExceptionHandlerResolvers() {
    StaticApplicationContext applicationContext = new StaticApplicationContext();
    applicationContext.registerSingleton("exceptionHandler", GlobalExceptionHandler.class);

    WebMvcConfigurationSupport webMvcConfigurationSupport = new WebMvcConfigurationSupport();
    webMvcConfigurationSupport.setApplicationContext(applicationContext);

    return webMvcConfigurationSupport.handlerExceptionResolver();
}

@Before
public void setup() {
    HandlerExceptionResolver handlerExceptionResolver = initGlobalExceptionHandlerResolvers();

    RestAssuredMockMvc.standaloneSetup(
            MockMvcBuilders
                    .standaloneSetup(controller)
                    .setHandlerExceptionResolvers(handlerExceptionResolver)
    );
}

Таким образом, мой GlobalExceptionHandler инициализируется с использованием StaticApplicationContext, а затем я извлекаю из него handlerExceptionResolver и передаю его в RestAssuredMockMvc standaloneSetup.

 ptimson03 авг. 2016 г., 12:01
У вас есть копия остальной части вашего кода. С замедлением контроллера и тестового класса?
 Krzysiek18 окт. 2016 г., 16:25
Работает отлично!

Я обновил Spring до 4.3.1.RELEASE и сделал следующее, чтобы он заработал:

GlobalControllerExceptionHandler globalControllerExceptionHandler = new GlobalControllerExceptionHandler(); @Before public void given_rest_assured_is_configured_with_cloud_study_controller() throws Exception { mockMvc = MockMvcBuilders.standaloneSetup(cloudStudyCountryController) .setControllerAdvice(globalControllerExceptionHandler).build(); RestAssuredMockMvc.mockMvc(mockMvc); dataObj.setCloudDataObjectCreateProcessor(createprocessor); }

Ваш ответ на вопрос