提交 c2b0fac8 编写于 作者: R Rossen Stoyanchev

Add extension point to pre-configure a MockMvcBuilder

Issue: SPR-11497
上级 d86e4cf2
/*
* 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,
......
/*
* 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);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册