Add extension point to pre-configure a MockMvcBuilder
Issue: SPR-11497
This commit is contained in:
parent
d86e4cf203
commit
c2b0fac852
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -50,6 +50,8 @@ public abstract class AbstractMockMvcBuilder<B extends AbstractMockMvcBuilder<B>
|
|||
|
||||
private Boolean dispatchOptions = Boolean.FALSE;
|
||||
|
||||
private final List<MockMvcConfigurer> configurers = new ArrayList<MockMvcConfigurer>(4);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -166,9 +168,9 @@ public abstract class AbstractMockMvcBuilder<B extends AbstractMockMvcBuilder<B>
|
|||
}
|
||||
|
||||
/**
|
||||
* Should the {@link org.springframework.web.servlet.DispatcherServlet} dispatch OPTIONS request to controllers.
|
||||
* @param dispatchOptions
|
||||
* @see org.springframework.web.servlet.DispatcherServlet#setDispatchOptionsRequest(boolean)
|
||||
* Whether to enable the DispatcherServlet property
|
||||
* {@link org.springframework.web.servlet.DispatcherServlet#setDispatchOptionsRequest
|
||||
* dispatchOptionsRequest} which allows processing of HTTP OPTIONS requests.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public final <T extends B> T dispatchOptions(boolean dispatchOptions) {
|
||||
|
|
@ -176,6 +178,18 @@ public abstract class AbstractMockMvcBuilder<B extends AbstractMockMvcBuilder<B>
|
|||
return (T) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a {@code MockMvcConfigurer} which encapsulates ways to further configure
|
||||
* this MockMvcBuilder with some specific purpose in mind.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public final <T extends B> T add(MockMvcConfigurer configurer) {
|
||||
configurer.afterConfigurerAdded(this);
|
||||
this.configurers.add(configurer);
|
||||
return (T) this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build a {@link org.springframework.test.web.servlet.MockMvc} instance.
|
||||
*/
|
||||
|
|
@ -187,6 +201,10 @@ public abstract class AbstractMockMvcBuilder<B extends AbstractMockMvcBuilder<B>
|
|||
ServletContext servletContext = wac.getServletContext();
|
||||
MockServletConfig mockServletConfig = new MockServletConfig(servletContext);
|
||||
|
||||
for (MockMvcConfigurer configurer : this.configurers) {
|
||||
configurer.beforeMockMvcCreated(this, this.defaultRequestBuilder, wac);
|
||||
}
|
||||
|
||||
Filter[] filterArray = this.filters.toArray(new Filter[this.filters.size()]);
|
||||
|
||||
return super.createMockMvc(filterArray, mockServletConfig, wac, this.defaultRequestBuilder,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.test.web.servlet.setup;
|
||||
|
||||
import org.springframework.test.web.servlet.MockMvcBuilder;
|
||||
import org.springframework.test.web.servlet.RequestBuilder;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
|
||||
/**
|
||||
* A contract that allows the encapsulation of a "recipe" for configuring a
|
||||
* MockMvcBuilder for some specific purpose. For example a 3rd party library
|
||||
* may use this to provide convenient, easy ways to set up MockMvc.
|
||||
*
|
||||
* <p>Supported via {@link AbstractMockMvcBuilder#add(MockMvcConfigurer)}
|
||||
* with instances of class likely created via static methods, e.g.:
|
||||
*
|
||||
* <pre class="code">
|
||||
* MockMvcBuilders.webAppContextSetup(context)
|
||||
* .add(myLibrary("foo","bar").myProperty("foo"))
|
||||
* .build();
|
||||
* </pre>
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 4.1
|
||||
*/
|
||||
public interface MockMvcConfigurer {
|
||||
|
||||
|
||||
/**
|
||||
* Invoked immediately after a {@code MockMvcConfigurer} is configured via
|
||||
* {@link AbstractMockMvcBuilder#add(MockMvcConfigurer)}.
|
||||
*/
|
||||
void afterConfigurerAdded(MockMvcBuilder mockMvcBuilder);
|
||||
|
||||
/**
|
||||
* Invoked just before the MockMvc instance is built providing access to the
|
||||
* configured "default" RequestBuilder. If a "default" RequestBuilder is
|
||||
* needed but was not configured and is {@code null}), it can still be added
|
||||
* via {@link AbstractMockMvcBuilder#defaultRequest}.
|
||||
*/
|
||||
void beforeMockMvcCreated(MockMvcBuilder mockMvcBuilder, RequestBuilder defaultRequestBuilder,
|
||||
WebApplicationContext applicationContext);
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue