我想为我的网络应用程序进行测试,但上下文配置在自动装配servletContext
时崩溃。错误如下。当我在tomcat / jetty上运行web-app时,自动装配servletContext
效果很好。
java.lang.IllegalStateException:无法加载ApplicationContext ... 引起:org.springframework.beans.factory.BeanCreationException: 创建名为'testController'的bean时出错:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:private javax.servlet.ServletContext com.test.controllers.TestController.servletContext;嵌套异常 是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 找到匹配的类型为[javax.servlet.ServletContext]的bean 依赖:预计至少有1个bean有资格成为autowire 这种依赖的候选人。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class FirstTest {
@Test
public void doTest() throws Exception {
// ...
}
}
的TestController
@Controller
public class TestController {
@Autowired
private ServletContext servletContext;
...
}
答案 0 :(得分:25)
根据ptomli提示,定义MockServletContext
bean可以解决问题。
<bean class="org.springframework.mock.web.MockServletContext"/>
出现的另一个问题是tilesConfigurer,但不起作用:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
Soultion:从applicationContext.xml中分离tiles配置,不要在jUnit测试中使用tile。
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
classpath:tilesConfig.xml
</param-value>
</context-param>
</web-app>
答案 1 :(得分:10)
我在测试类下添加了@WebAppConfiguration
,问题消失了