Junit 测试 ServletContextListener 相关问题

junit 同时被 2 个专栏收录
1 篇文章 0 订阅
2 篇文章 0 订阅

在进行单元测试的时候,有时候需要测试Web项目启动的相关初始化操作,即执行contextIntialized(ServletContextEvent event)操作,主要的一个问题点ServletContextEvent。

一种解决方案是直接new一个,但是需要一个ServletContext对象,就直接通过WebApplicationContext获取了。可是在通过自动获取WebApplicationContext对象的时候报了java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig这个错误,这是因为Spring与Servlet版本不兼容引起的,在测试范围内引入高版本的Servlet即可。

 测试代码:

import org.junit.Test;
import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.contest.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.context.WebApplicationContext;

import javax.servlet.ServletContext;
import javax.servlet.SerletContextEvent;

@Runner(SpringJunit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:/spring.xml",classpath*:/applicationContext.xml"})
@WebAppConfiguration
public class Test{
    @Autowired
    private WebApplicationContext webApplicationContext;

    @Test
    public void test() {
        ServletContext servletContext = webApplicationContext.getServletContext();
        ServletContextEvent event = new ServletContextEvent(servletContext);
        
        ...
    }
}

Spring与Servlet版本不兼容:

java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig

pom.xml引入如下依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>test</scope>
</dependency>

参考:

https://blog.csdn.net/liu_gan/article/details/78400627

https://blog.csdn.net/qianjiangqi/article/details/51087014

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

一只不会飞的小菜鸟

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值