如何在测试 Struts2 时设置 spring 活动配置文件
How to set spring active profile when testing Struts2
测试独立 spring 环境时,我们可以这样做:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:spring-*.xml" })
@ActiveProfiles( profiles = { "Prod","bsi"})
public class SampleTest
当使用 spring 集成测试 Struts 2 时,我们可以使用:
public class SessionManagement extends StrutsSpringTestCase {
@Override
public String[] getContextLocations() {
return new String[] {"classpath:spring-*.xml"};
}
}
但是如何在此处设置活动 spring 配置文件?
您可以通过应用程序上下文环境在 spring 中设置活动配置文件。
由于 StrutsTestCase
使用不可配置的 GenericXmlContextLoader
,您需要在测试中重写 setupBeforeInitDispatcher
方法并使用一些可以设置的上下文(例如 XmlWebApplicationContext
)配置文件并调用 refresh
.
@Override
protected void setupBeforeInitDispatcher() throws Exception {
// only load beans from spring once
if (applicationContext == null) {
XmlWebApplicationContext webApplicationContext = new XmlWebApplicationContext();
webApplicationContext.setConfigLocations(getContextLocations());
webApplicationContext.getEnvironment().setActiveProfiles("Prod", "bsi");
webApplicationContext.refresh();
applicationContext = webApplicationContext;
}
servletContext.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
applicationContext);
}
JUnit 4
由于您使用的是 JUnit 4,所以有 StrutsSpringJUnit4TestCase
摘要 class。扩展它,您可以像在 SampleTest
.
中一样使用注释
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:spring-*.xml" })
@ActiveProfiles(profiles = { "Prod","bsi"})
public class SessionManagement extends StrutsSpringJUnit4TestCase<SomeAction>
测试独立 spring 环境时,我们可以这样做:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:spring-*.xml" })
@ActiveProfiles( profiles = { "Prod","bsi"})
public class SampleTest
当使用 spring 集成测试 Struts 2 时,我们可以使用:
public class SessionManagement extends StrutsSpringTestCase {
@Override
public String[] getContextLocations() {
return new String[] {"classpath:spring-*.xml"};
}
}
但是如何在此处设置活动 spring 配置文件?
您可以通过应用程序上下文环境在 spring 中设置活动配置文件。
由于 StrutsTestCase
使用不可配置的 GenericXmlContextLoader
,您需要在测试中重写 setupBeforeInitDispatcher
方法并使用一些可以设置的上下文(例如 XmlWebApplicationContext
)配置文件并调用 refresh
.
@Override
protected void setupBeforeInitDispatcher() throws Exception {
// only load beans from spring once
if (applicationContext == null) {
XmlWebApplicationContext webApplicationContext = new XmlWebApplicationContext();
webApplicationContext.setConfigLocations(getContextLocations());
webApplicationContext.getEnvironment().setActiveProfiles("Prod", "bsi");
webApplicationContext.refresh();
applicationContext = webApplicationContext;
}
servletContext.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
applicationContext);
}
JUnit 4
由于您使用的是 JUnit 4,所以有 StrutsSpringJUnit4TestCase
摘要 class。扩展它,您可以像在 SampleTest
.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:spring-*.xml" })
@ActiveProfiles(profiles = { "Prod","bsi"})
public class SessionManagement extends StrutsSpringJUnit4TestCase<SomeAction>