spring结合junit进行单元测试(二)——测试后进行事务回滚

来源:互联网 发布:小程序砸金蛋源码 编辑:程序博客网 时间:2024/05/04 05:04

spring结合junit进行单元测试(二)——测试后进行事务回滚

上篇文章讲述了基本的测试,是一个简单的查询,但是在我们进行测试的时候,更多的时候都需要直接进行数据库的增加更新等操作。那这样是不是就把本来的数据破坏了呢。
spring配合unit进行测试的时候是可以用声明事务的方式进行测试的。下面是一些做法。
1、在spiring的配置文件中增加对数据层的transaction支持。
<!-- 事务注解驱动,标注@Transactional的类和方法将具有事务性 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 事务注解驱动,标注@Transactional的类和方法将具有事务性 -->    <tx:annotation-driven transaction-manager="transactionManager" />



2、在单元测试上面声明使用@Transactional,并且,对Transaction进行配置,下面是代码实现:
package test;import com.xueyou.ssm.service.FirstService;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.test.context.transaction.TransactionConfiguration;import org.springframework.transaction.annotation.Transactional;import static org.mockito.Mockito.*;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by wuxueyou on 16/10/25. */@RunWith(value = SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring-mvc/springmvc-servlet.xml",        "file:src/main/webapp/WEB-INF/spring-mvc/datasource.xml"})@Transactional@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)public class MockitohelloTest {    public List<String> mockannotationList;    @Test    public void simpleTest(){        List<String> mockList = mock(List.class);        mockList.add("one");        mockList.add("one");        mockList.add("one");        mockList.clear();        verify(mockList).clear();        verify(mockList, atLeast(3)).add("one");    }    @Autowired    FirstService firstService;    @Test    public void FirstModelTest(){        Map<String,Object> params = new HashMap<>();        Map<String,Object> resMap = firstService.getJson(params);        for (String s : resMap.keySet()) {            System.out.println(resMap.get(s));        }        Assert.assertEquals(1, resMap.get("resCode"));   }    @Test//    @Transactional 由于上面进行了总体的声明,所以这里不用再次声明//    @Rollback(true)    public void InsertUser(){        Map<String,Object> params = new HashMap<>();        Map<String,Object> resMap = firstService.insertUser(params);        Assert.assertEquals(1, resMap.get("resCode"));    }}

这样运行后,查看数据库是没有刚刚插入的内容的。如果想看到真实的插入状态,可以在测试的函数上增加
@Rollback(false)即可。
0 0
原创粉丝点击