Browse Source
Prior to this commit, if multiple test methods were executed in a subclass of AbstractTestNGSpringContextTests annotated with @WebAppConfiguration, then injected Servlet API mocks would only reference the mocks created for the first test method. Subsequent test methods could therefore never reference the current mocks, and there was a discrepancy between the state of the injected mocks and the mock set in the RequestContextHolder. This commit addresses this issue by ensuring that dependencies (including updated mocks) are injected into the test instance before the next test method if the ServletTestExecutionListener resets the request attributes in RequestContextHolder. Issue: SPR-11626 (cherry picked from commit c38600762dd17c5b4f1dabeb42c2dff77b5a66d1)pull/531/head
3 changed files with 167 additions and 5 deletions
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
/* |
||||
* 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.context.testng.web; |
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.mock.web.MockHttpServletRequest; |
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; |
||||
import org.springframework.test.context.web.ServletTestExecutionListener; |
||||
import org.springframework.test.context.web.WebAppConfiguration; |
||||
import org.springframework.web.context.request.RequestContextHolder; |
||||
import org.springframework.web.context.request.ServletRequestAttributes; |
||||
import org.testng.annotations.Test; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
/** |
||||
* TestNG-based integration tests for {@link ServletTestExecutionListener}. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 3.2.9 |
||||
* @see org.springframework.test.context.web.ServletTestExecutionListenerJUnitIntegrationTests |
||||
*/ |
||||
@ContextConfiguration |
||||
@WebAppConfiguration |
||||
public class ServletTestExecutionListenerTestNGIntegrationTests extends AbstractTestNGSpringContextTests { |
||||
|
||||
@Configuration |
||||
static class Config { |
||||
/* no beans required for this test */ |
||||
} |
||||
|
||||
|
||||
@Autowired |
||||
private MockHttpServletRequest servletRequest; |
||||
|
||||
|
||||
/** |
||||
* Verifies bug fix for <a href="https://jira.spring.io/browse/SPR-11626">SPR-11626</a>. |
||||
* |
||||
* @see #ensureMocksAreReinjectedBetweenTests_2 |
||||
*/ |
||||
@Test |
||||
public void ensureMocksAreReinjectedBetweenTests_1() { |
||||
assertInjectedServletRequestEqualsRequestInRequestContextHolder(); |
||||
} |
||||
|
||||
/** |
||||
* Verifies bug fix for <a href="https://jira.spring.io/browse/SPR-11626">SPR-11626</a>. |
||||
* |
||||
* @see #ensureMocksAreReinjectedBetweenTests_1 |
||||
*/ |
||||
@Test |
||||
public void ensureMocksAreReinjectedBetweenTests_2() { |
||||
assertInjectedServletRequestEqualsRequestInRequestContextHolder(); |
||||
} |
||||
|
||||
private void assertInjectedServletRequestEqualsRequestInRequestContextHolder() { |
||||
assertEquals("Injected ServletRequest must be stored in the RequestContextHolder", servletRequest, |
||||
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
|
||||
/* |
||||
* 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.context.web; |
||||
|
||||
import org.junit.Test; |
||||
import org.junit.runner.RunWith; |
||||
import org.springframework.beans.factory.annotation.Autowired; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.mock.web.MockHttpServletRequest; |
||||
import org.springframework.test.context.ContextConfiguration; |
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; |
||||
import org.springframework.web.context.request.RequestContextHolder; |
||||
import org.springframework.web.context.request.ServletRequestAttributes; |
||||
|
||||
import static org.junit.Assert.*; |
||||
|
||||
/** |
||||
* JUnit-based integration tests for {@link ServletTestExecutionListener}. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 3.2.9 |
||||
* @see org.springframework.test.context.testng.web.ServletTestExecutionListenerTestNGIntegrationTests |
||||
*/ |
||||
@RunWith(SpringJUnit4ClassRunner.class) |
||||
@ContextConfiguration |
||||
@WebAppConfiguration |
||||
public class ServletTestExecutionListenerJUnitIntegrationTests { |
||||
|
||||
@Configuration |
||||
static class Config { |
||||
/* no beans required for this test */ |
||||
} |
||||
|
||||
|
||||
@Autowired |
||||
private MockHttpServletRequest servletRequest; |
||||
|
||||
|
||||
/** |
||||
* Verifies bug fix for <a href="https://jira.spring.io/browse/SPR-11626">SPR-11626</a>. |
||||
* |
||||
* @see #ensureMocksAreReinjectedBetweenTests_2 |
||||
*/ |
||||
@Test |
||||
public void ensureMocksAreReinjectedBetweenTests_1() { |
||||
assertInjectedServletRequestEqualsRequestInRequestContextHolder(); |
||||
} |
||||
|
||||
/** |
||||
* Verifies bug fix for <a href="https://jira.spring.io/browse/SPR-11626">SPR-11626</a>. |
||||
* |
||||
* @see #ensureMocksAreReinjectedBetweenTests_1 |
||||
*/ |
||||
@Test |
||||
public void ensureMocksAreReinjectedBetweenTests_2() { |
||||
assertInjectedServletRequestEqualsRequestInRequestContextHolder(); |
||||
} |
||||
|
||||
private void assertInjectedServletRequestEqualsRequestInRequestContextHolder() { |
||||
assertEquals("Injected ServletRequest must be stored in the RequestContextHolder", servletRequest, |
||||
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue