SSM框架学习——单元测试类

说起这个单元测试类,我真是感受到自己菜得扣脚。之前一直以为来个@Test就行了,没想到今天测试hibernate validator时,报了一个错误:No qualifying bean of type ‘javax.servlet.http.HttpServletRequest’

1. 问题背景

原因如下,我在业务层使用了@Autowire来注入HttpServletRequest。经过查看别人的博客,发现原因是我写的测试类只读取了spring和springmvc的配置文件,没有servlet的相关配置,所以不能使用@Autowire来注入HttpServletRequest。

    @Resource
    private UserInfoService userInfoService;
    @Resource
    private HttpServletRequest request;

2.解决问题和原因分析

解决办法时是:在测试类上加上@WebAppConfiguration注解

@WebAppConfiguration注解的作用是更改资源的加载方式,即从src / main / webapp或@WebAppConfiguration的value参数指定的位置加载,而不是classpath。

如果没有@WebAppConfiguration注解,那些非classpath下的配置在Spring上下文中不可用,因为通常classpath不包含webapp文件夹

3. 具体代码

测试类的需要的依赖要注意版本问题

使用@RunWith(SpringJUnit4ClassRunner.class)的话,junit版本不低于4.12

servlet倒不是测试类的依赖,只是想说版本不能低于3.0,否则会报错java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:springmvc.xml"})
@WebAppConfiguration
public class TestSpring {
	//直接注入
    @Resource(name = "validator")
    LocalValidatorFactoryBean validatorFactoryBean;
    @Test
    public void run(){

		//你的测试代码
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值