360SDN.COM

首页/Java/列表

springMVC整合Junit4进行单元测试

来源:  2017-07-06 11:08:59    评论:0点击:

用Junit做单元测试的好处多多,博主领悟到了两点。一是不用在每个类里面都写main方法然后去测试;二是可以得到每个方法执行所消耗的时间,不用自己计算。

springMVC集成Junit4需要两个jar包:junit-4.10.jar和spring-test-4.2.0.RELEASE.jar。

jar包下载地址:http://download.csdn.net/detail/qq_33556185/9570870

首先呢我们可以先写一个单元测试的基类BaseJunitTest:

@RunWith(SpringJUnit4ClassRunner.class)  注解让测试运行于Spring测试环境;

@ContextConfiguration注解加载的是Spring的配置文件
 

 
    package com.core;  
    import org.junit.runner.RunWith;  
    import org.springframework.test.context.ContextConfiguration;  
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
    @RunWith(SpringJUnit4ClassRunner.class)    
    @ContextConfiguration(locations = {"classpath*:/spring/servlet.xml","classpath*:/spring/common.xml"})    
    public class BaseJunitTest {  
          
    }  
然后让需要测试的类去继承BaseJunitTest,并且用@Test注解写在方法上


 
    package com.mvc.controller;  
    import org.junit.Test;  
    import com.core.BaseJunitTest;  
    public class JunitTest extends BaseJunitTest{  
            @Test  
            public void test0(){  
                System.out.println("第一个测试方法*******");  
            }  
              
            @Test  
            public void test1(){  
                System.out.println("第二个测试方法*******");  
            }  
              
            @Test  
            public void test2(){  
                System.out.println("第三个测试方法*******");  
            }  
      
    }  



单元测试基础类


import org.junit.runner.RunWith;  
import org.springframework.test.context.ContextConfiguration;  
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;  
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
 
//指定bean注入的配置文件  
@ContextConfiguration(locations = { "classpath:/spring/spring_root.xml" ,"classpath:/spring/spring_mvc.xml"})  
//使用标准的JUnit @RunWith注释来告诉JUnit使用Spring TestRunner  
@RunWith(SpringJUnit4ClassRunner.class)  
public class SpringTestCase extends AbstractJUnit4SpringContextTests {
 
}

在这里配置好要加载的配置文件,然后用你写的普通单元测试类继承这个类,然后在相应的方法上加上@Test注解就可以进行单元测试了。

功能复杂的单元测试



首先,在src/test/java中写我们的测试类XXXXTest.java然后在类上面加上注解:



import java.util.Date;
import java.util.List;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
 
import com.macow.home.first.entity.User;
import com.macow.home.first.mapper.UserMapper;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring-context.xml")
@ActiveProfiles(value="dev")
@Transactional
public class UserMapperTest {
    private Logger logger=LoggerFactory.getLogger(this.getClass());
    @Autowired
    private UserMapper userMapper;
    
    @Test
    public void testUserInsert() {
        User user=new User();
        user.setName("杨过");
        user.setPassword("222222");
        user.setCreateDate(new Date());
        userMapper.insert(user);
        logger.info("--------->testUserInsert end-------------");
    }
 
    @Test
    public void testUserSelect() {
        List<User> select = userMapper.select(null);
        for(User user:select){
            logger.info("--------->"+user.getName()+"-------------");
        }
        logger.info("--------->testUserInsert end-------------");
    }
}


@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持!
@ContextConfiguration(locations = "classpath:applicationContext.xml") 多个配置文件的话可以用数组表示{“applicationContext.xml”,“applicationContext1.xml”},下面我会贴我的配置文件,只有一个配置文件;
@ContextConfiguration("/spring-context.xml")放在根路径下(即类路径下),然后<import resource="spring-dao.xml" />所有的配置文件和资源文件
@Transactional这个非常关键,如果不加入这个注解配置,事务控制就会完全失效! 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库! 
AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!(即所有事务均不生效)
@ActiveProfiles(value="dev")配置环境选择

其次,在src/test/resource目录,我们只要放一个spring-context.xm配置文件,把所有的在src/main/resource下配置文件和资源文件加载进来就可以spring-context.xm里面加载到spring中就可以,所以这个目录一般就一个xml文件,其他都是配置的properties文件。

我的配置文件spring-context.xml:




<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd">
 
<!--     <context:property-placeholder location="classpath*:jdbc.properties" /> -->
    
    <import resource="spring-dao.xml" />
    <beans profile="dev"  >
        <context:property-placeholder location="classpath*:jdbc-dev.properties" />
    </beans>
    <beans profile="sit"  >
        <context:property-placeholder location="classpath*:jdbc-sit.properties" />
    </beans>
</beans>



需要注意的地方:
测试方法命名:不能叫test方法,类也不能叫Test类


为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权