在春季测试中请求范围好的豆子适用于 Spring 3.2 或更高版本的解决方案3.2之前春季与听众的解决方案3.2 之前的 Spring 解决方案,带自定义示波器源码
我想在我的应用中使用请求范围的Bean。我使用JUnit4进行测试。如果我尝试在这样的测试中创建一个:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/TestScopedBeans-context.xml" })
public class TestScopedBeans {
protected final static Logger logger = Logger
.getLogger(TestScopedBeans.class);
@Resource
private Object tObj;
@Test
public void testBean() {
logger.debug(tObj);
}
@Test
public void testBean2() {
logger.debug(tObj);
}
具有以下豆定义:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="java.lang.Object" id="tObj" scope="request" />
</beans>
我得到:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'gov.nasa.arc.cx.sor.query.TestScopedBeans': Injection of resource fields failed; nested exception is java.lang.IllegalStateException: No Scope registered for scope 'request'
<...SNIP...>
Caused by: java.lang.IllegalStateException: No Scope registered for scope 'request'
所以我发现这个博客似乎很有帮助:http://www.javathinking.com/2009/06/no-scope-registered-for-scope-request_5.html
但我注意到他使用了 AbstractDependencyInjectionSpringContextTests,这似乎在 Spring 3.0 中被弃用了。我现在使用Spring 2.5,但我认为按照文档的建议将此方法切换到使用AbstractJUnit4SpringContextTests应该不会太难(好的,文档链接到3.8版本,但我使用的是4.4)。所以我改变了测试来扩展抽象JUnit4SpringContextTests...相同的消息。同样的问题。现在,我想要重写的 prepareTestInstance() 方法尚未定义。好吧,也许我会把那些 registerScope 调用放到别的地方...因此,我阅读了更多关于TestExecutionListeners的信息,并认为这样会更好,因为我不想继承弹簧包结构。所以我把我的测试改成了:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/TestScopedBeans-context.xml" })
@TestExecutionListeners({})
public class TestScopedBeans {
期望我必须创建一个自定义侦听器,但是当我运行它时。它的工作原理!很好,但为什么呢?我没有看到任何股票侦听器在哪里注册请求范围或会话范围,为什么会这样做?没有什么可说的,我想要的,这可能不是对春季MVC代码的测试......