使用ServletContextListener进行单元测试

时间:2012-05-16 09:12:10

标签: spring unit-testing servlets listener

我有一个ServletContextListener来初始化我的数据库。我在我的web.xml中添加它:

<listener>
   <listener-class>util.MySessionListener</listener-class>
</listener>

当我启动服务器时,一切都很好。

但是当我运行我的AbstractTransactionalJUnit4SpringContextTests-tests时,它不会被调用。我该怎么办?

2 个答案:

答案 0 :(得分:10)

这是ServletContextListener还是HttpSessionListener?你的命名令人困惑。

然而,只需在@Before

中运行即可
MockServletContext mockServletContext = new MockServletContext()
new MySessionListener().contextInitialized(
  new ServletContextEvent(mockServletContext)
)

MockServletContext来自Spring。如果您的听众使用WebApplicationContextUtils,则需要在运行contextInitialized()之前添加此内容:

mockServletContext.setAttribute(
  WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, 
  yourTestApplicationContext
);

yourTestApplicationContextApplicationContext的一个实例,您只需注入测试用例:

@Autowired
private ApplicationContext yourTestApplicationContext;

答案 1 :(得分:0)

我用

解决了这个问题
ApplicationContextAware

接口:

<bean id="springApplicationContext" class="server.utils.SpringApplicationContext" />

并在

public void setApplicationContext(ApplicationContext context) throws BeansException {

我可以进行初始化,休眠,此时一切准备就绪