2016-06-26 16 views
1

In meinem Projekt Assured ich Ruhe bin mit Assured MockMVC mit der folgenden Abhängigkeit:Ruhe + Mock MVC @ControllerAdvice

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

Und meine Test-Klasse wie folgt aussieht:

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

ich ein paar haben ExceptionHandlers in der Controller-Klasse definiert. In meinen JUnit-Tests konnte ich die Anfragepfade und die Handler überprüfen, wenn sie in der Controller-Klasse definiert sind.

Allerdings - Wenn ich die Handler in eine separate Klasse mit @ControllerAdvice verschoben, werden Handler nicht aus den Tests aufgerufen.

Ich habe verstanden, dass es wegen der eigenständigen Einrichtung für den Controller ist, die möglicherweise Handler nicht laden konnte, die in einer anderen Klasse definiert sind.

Aber ich konnte nicht herausfinden, wie ich die Ausnahme-Handler zu den RestAssuredMockMvc hinzufügen, im Standalone-Modus, um dies zu arbeiten.

Ich kämpfe und jede Hilfe ist sehr willkommen bitte.

+0

Willkommen bei Stack Overflow! Ich habe Ihre Frage bearbeitet, um das Codebeispiel um 4 Leerzeichen einzurücken, damit es richtig dargestellt wird. Weitere Informationen zur Formatierung finden Sie in der Bearbeitungshilfe. Bitte bearbeiten Sie in, um weitere Details zur Identifizierung des spezifischen Problems anzugeben. Viel Glück! – Wtower

Antwort

1

Basierend auf this answer ich eine Lösung erstellt haben, die gut für mich funktioniert:

/** 
* 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) 
    ); 
} 

So ist mein GlobalExceptionHandler mit StaticApplicationContext initialisiert und dann rufe ich handlerExceptionResolver aus es und geben es in RestAssuredMockMvc standaloneSetup

+0

Haben Sie eine Kopie des restlichen Codes? Mit Verzögerung von Controller und Test Class? – ptimson

+0

Funktioniert ausgezeichnet! – Krzysiek

3

Ich verbesserte Spring zu 4.3.1.RELEASE und tat das folgende, um es zu arbeiten -

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); }