背景
单元测试时,一开始时这样写的
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:/applicationContext.xml")
public class BaseTest {
}
但是使用
ContextLoader.getCurrentWebApplicationContext()返回的确是null
经过研究
1.单元测试增加@WebAppConfiguration注解
2.增加@Before这段代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:/applicationContext.xml")
@WebAppConfiguration
public class BaseTest {
@Autowired
private WebApplicationContext wac;
@Before
public void setApplication(){
MockServletContext sc = new MockServletContext("");
ServletContextListener listener = new ContextLoaderListener(wac);
ServletContextEvent event = new ServletContextEvent(sc);
listener.contextInitialized(event);
}
}
原因:
ContextLoader类是web容器启动时,才会把ApplicationContext的上下文加载出来。即是通过web.xml文件中的
org.springframework.web.context.ContextLoaderListener
类来设置ApplicationContext的上下文。
版权声明:本文为xing930408原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。